python django中外键的反向查找
我有两张桌子:部门和员工python django中外键的反向查找,python,django,django-orm,Python,Django,Django Orm,我有两张桌子:部门和员工 Dept has 2 columns ID and Name Employees has 3 columns ID, Dept_ID, Name 现在给定一个Emloye名称“XYZ”,我必须检索所有有一个名为“XYZ”的员工的部门名称 我知道这是一个解决方法,首先从Employee表中检索名称为“XYZ”的所有部门id,然后再查询从dept表中检索部门名称 是在单个查询中检索记录的一种方法 return Dept.objects.filter(employees_s
Dept has 2 columns ID and Name
Employees has 3 columns ID, Dept_ID, Name
现在给定一个Emloye名称“XYZ”,我必须检索所有有一个名为“XYZ”的员工的部门名称
我知道这是一个解决方法,首先从Employee表中检索名称为“XYZ”的所有部门id,然后再查询从dept表中检索部门名称
是在单个查询中检索记录的一种方法
return Dept.objects.filter(employees_set__name='XYZ')
我应该做这项工作
应该做这项工作。我强烈建议对所有外键使用“相关名称”:
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”),但它对于用户表的关系非常有用,例如 我强烈建议对所有外键使用“相关名称”:
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”),但它对于用户表的关系非常有用,例如