我如何使用ManyToManyField进行查询?

问题描述 投票:1回答:1

如果我知道company_id,我怎么称呼查询列表部门,每个部门都有列表用户,每个用户都有用户名和staff_id?示例模型和下面的输出

class User(models.Model):
    username=models.CharField(max_length=40,unique=True)

class Company(models.Model)
    name=models.CharField(max_length=100)
    users = models.ManyToManyField('User', through='User_Company',related_name="companies")

class Department(models.Model)
    name=models.CharField(max_length=100)
    users = models.ManyToManyField('User', through='User_Department',related_name="departments")

class User_Department(models.Model)
    user = models.ForeignKey('User', on_delete=models.CASCADE,related_name="ud_membership")
    department = models.ForeignKey('Department', on_delete=models.CASCADE,related_name="ud_membership")

class User_Company(models.Model)
    user = models.ForeignKey('User', on_delete=models.CASCADE,related_name="uc_membership")
    company = models.ForeignKey('Company', on_delete=models.CASCADE,related_name="uc_membership")
    staff_id = =models.CharField(max_length=50)

我希望以这种格式输出数据:

[{编号:1名称:“部门1”,使用者:[{编号:1用户名:“ username1”,staff_id:“ staff1”},{编号:2用户名:“ username2”,staff_id:“ staff2”}]},{编号:2名称:“部门2”,使用者:[{id:3,用户名:“ username3”,staff_id:“ staff3”},{编号:4用户名:“ username4”,staff_id:“ staff4”}]}]

python django manytomanyfield m2m
1个回答
0
投票

您可以找到与至少一个共同使用者的部门:

Department.objects.filter(users__companies=company_id).distinct()

.distinct() clause [Django-doc]将防止多次重播.distinct()。如果没有Department,则每个.distinct()将被返回与普通用户相同的次数。

© www.soinside.com 2019 - 2024. All rights reserved.