我正在尝试根据请求用户管理哪些部门来过滤人工查询。
安藤(例如人类)管理三个部门。我想归还这三个部门的所有人。
人类可以有多个合同。每个合同都将人员附加到部门:
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)
答案 0 :(得分:0)
您可以使用双下划线(__
)来通过引用(例如ForeignKey
)。
y9ou对Human
感兴趣,因此我们可以通过以下方式进行查询:
output_humans = Human.objects.filter(contracts__department__in=depts).distinct()
因此,我们可以省略循环(在depts
和contracts
上)以及Contract
查询。
因此,我们要求distinct()
(因为多次不返回 same Human
)为此,Contract
中至少有一个{ Department
中的{1}}。