Django的新手,不确定如何将FK捆绑在一起的查询集

时间:2018-07-27 20:26:01

标签: django django-queryset django-orm

对于经常使用django标签的人,您可能会意识到我是django的新手(并且很长一段时间都没有真正进行过开发)。

我正在为ORM进行查询。

我有两种模式,用户和部门。部门有一个领导者,对用户而言是FK。

如何返回部门的所有实例及其相关的用户姓氏和名字?

类似的东西:

SELECT Department.dept, User.first_name, User.last_name 
FROM Departments, Users
WHERE Department.leader = User.Id OR Department.leader = NULL

感谢您的帮助,我只是暂时还没有接受关于ORM的查询思想。

1 个答案:

答案 0 :(得分:1)

  

如何返回部门的所有实例及其相关的用户姓氏和名字?

您可以使用leader访问some_department中的some_department.leader。但是,如果您想以这种方式注释每个部门(例如,因为您需要快速访问这些字段),则可以编写:

from django.db.models import F

Department.objects.annotate(
    first_name=F('leader__first_name')
    last_name=F('leader__last_name')
)

这将返回Department实例,但是每个departement都有两个额外的属性,first_namelast_name包含first_name和{{1} }。

这将导致如下查询:

last_name