我正在尝试根据请求用户管理的部门过滤人工查询。
安藤(人类示例(管理三个部门。我想把这三个部门的所有人类都还回来。
人类可以有多个合同。每份合同都将人员附加到一个部门:
class Contract(models.Model):
human = models.ForeignKey(Human, related_name='contracts', on_delete=models.CASCADE)
department = models.ForeignKey(ShowDepartment, related_name='contracts', on_delete=models.CASCADE)
我在下面的内容有效,但我相信有一种更有效的方法来进行此查询。
output_humans = []
depts = self.request.user.human_profile.departments_managed()
for d in depts:
contracts = Contract.objects.filter(department=d)
for c in contracts:
if c.human not in output_humans:
output_humans.append(c.human)
您可以使用双下划线 (__
( 来查看引用(如ForeignKey
(。
这里 y9ou 对Human
s 感兴趣,因此我们可以查询:
output_humans = Human.objects.filter(contracts__department__in=depts).distinct()
因此,我们可以省略循环(depts
和contracts
(以及Contract
查询。
因此,我们需要distinct()
(例如不多次返回相同的Human
(,其中至少有一个Contract
在depts
的Department
中。