如果我知道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”}]}]
您可以找到与至少一个共同使用者的部门:
Department.objects.filter(users__companies=company_id).distinct()
.distinct()
clause [Django-doc]将防止多次重播.distinct()
。如果没有Department
,则每个.distinct()
将被返回与普通用户相同的次数。