简化跨多个对象的查询



我正在尝试根据请求用户管理的部门过滤人工查询。

安藤(人类示例(管理三个部门。我想把这三个部门的所有人类都还回来。

人类可以有多个合同。每份合同都将人员附加到一个部门:

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 对Humans 感兴趣,因此我们可以查询:

output_humans = Human.objects.filter(contracts__department__in=depts).distinct()

因此,我们可以省略循环(deptscontracts(以及Contract查询。

因此,我们需要distinct()(例如不多次返回相同的Human(,其中至少有一个ContractdeptsDepartment中。

相关内容

  • 没有找到相关文章

最新更新