python django中外键的反向查找

Anu*_*rma 2 python django django-orm

我有 2 张表“部门”和“员工”

Dept has 2 columns ID and Name
Employees has 3 columns ID, Dept_ID, Name
Run Code Online (Sandbox Code Playgroud)

现在给定员工姓名“XYZ”,我必须检索员工姓名为“XYZ”的所有部门名称

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

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

Fra*_*ant 7

我强烈建议对所有外键使用“lated_name”:

class Employee(models.Model):
    dept = models.ForeignKey(Dept, related_name='employees')
Run Code Online (Sandbox Code Playgroud)

那么你可以这样做:

dept = Dept.objects.get(id=10)
for employee in dept.employees.all():
    ...
Run Code Online (Sandbox Code Playgroud)

对于您所询问的查询:

Dept.objects.filter(employees__name='XYZ')
Run Code Online (Sandbox Code Playgroud)

这对于添加更有意义的名称也非常有用。在这种情况下,这不是什么大问题(只是删除“设置”),但它对于例如用户表的关系非常有用......