在Python Django中反向查找外键
我有两个表,一个是部门表(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')
应该能解决问题。