在Python Django中反向查找外键

2 投票
2 回答
6817 浏览
提问于 2025-04-18 16:11

我有两个表,一个是部门表(Dept),另一个是员工表(Employee)。

Dept has 2 columns ID and Name
Employees has 3 columns ID, Dept_ID, Name

现在,给定一个员工名字“XYZ”,我需要找出所有有这个名字的员工所在的部门名称。

我知道可以先从员工表中找出所有名字是“XYZ”的员工的部门ID,然后再用另一个查询从部门表中获取这些部门的名称。

有没有办法在一个查询中就把这些记录都拿到呢?

2 个回答

7

我强烈建议在所有外键中使用“related_name”:

class Employee(models.Model):
    dept = models.ForeignKey(Dept, related_name='employees')

这样你就可以这样做:

dept = Dept.objects.get(id=10)
for employee in dept.employees.all():
    ...

至于你问的查询:

Dept.objects.filter(employees__name='XYZ')

这样做真的很有用,可以让名字更有意义。在这个例子中,去掉“set”并不是大问题,但对于用户表的关系来说,这样做就非常有用了……

3
return Dept.objects.filter(employees_set__name='XYZ')

应该能解决问题。

撰写回答