【问题标题】:How can i query with ManyToManyField?如何使用 ManyToManyField 进行查询?
【发布时间】:2020-09-09 04:26:20
【问题描述】:

如果我知道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)

我想要这种格式的数据输出:

【问题讨论】:

  • 你能详细说明你的问题吗...
  • 我为我的问题添加了信息

标签: python django manytomanyfield m2m


【解决方案1】:

您可以找到至少有一个共同用户的部门:

Department.objects.filter(<b>users__companies=company_id</b>).<b>distinct()</b>

.distinct() clause [Django-doc] 将阻止多次返回Departments。如果没有.distinct(),每个Department 将被返回多少次,因为有普通用户。

【讨论】:

    最近更新 更多