如何创建一个使用两个类的django查询集?

时间:2016-03-05 21:33:18

标签: python django django-queryset

如何链接django查询集中的两个类。例如,我有一个Person类和一个类Department。一个人有一个属性工资,一个部门有一个属性领导者。如何进行查询以获得部门领导的薪水。

我很高兴得到任何帮助:)

1 个答案:

答案 0 :(得分:1)

您不需要特殊查询,leader对象上的Department属性可让您访问完整的Person对象及其所有属性:

department = Department.objects.get(pk=1)
print(department.leader.salary)

在幕后,上面的代码将生成两个SQL查询器。要确保只发出一个查询,您可以选择使用select_related

department = Department.objects.select_related('leader').get(pk=1)
print(department.leader.salary)

这样Django将在原始查询期间获取有关领导者Person对象的信息(而不是通常的"懒惰"等待实际需要的方法)。然而,这只是一种优化,而且通常不需要时间。

如果您想使用关系中对象的字段过滤查询集,可以使用the __ notation,它代表两个模型之间的关系:

departments = Department.objects.filter(leader__salary=100)