在python django中反向查找外键

时间:2014-08-06 06:00:32

标签: python django django-orm

我有2个表部门和员工

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

现在给出了一个emloyee名称" XYZ"我必须检索所有具有名称" XYZ"的员工的部门名称。

我知道他们的解决方法是首先从Employee表中检索所有dept_id having name == "XYZ",然后再从查询表中检索部门名称的另一个查询。

他们是一种在单个查询中检索记录的方法。

2 个答案:

答案 0 :(得分:1)

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

应该做的工作。

答案 1 :(得分:1)

我强烈建议您为所有外键使用“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'),但它对于User表的关系非常有用...