正确访问相关对象的方法

时间:2009-10-29 22:49:02

标签: python django django-models

我有以下型号

class Person(models.Model):  
  name = models.CharField(max_length=100)  

class Employee(Person):
  job = model.Charfield(max_length=200)  

class PhoneNumber(models.Model):
  person = models.ForeignKey(Person)  

如果我有员工ID,如何访问与员工关联的PhoneNumbers?

目前我正在使用

phones = PhoneNumbers.objects.filter(person__id=employee.id)
它的工作原理只是因为我知道employee.id和person.id是相同的值,但我确信这是不正确的方法。

感谢
安德鲁

2 个答案:

答案 0 :(得分:5)

您可以(并且应该)在不知道外键字段的情况下进行过滤:

PhoneNumber.objects.filter(employee=your_employee).all()

答案 1 :(得分:4)

你可以这样做:

employees = Employee.objects.filter(id=your_id).select_related()
if employees.count() == 1:
    phone_numbers = employees[0].phonenumber_set.all()

这应该可以在一个数据库查询中获取所有电话号码。

默认情况下,您可以通过使用“全部小写的模型名称”,然后使用“_set”来访问“对面”侧的外键相关的模型。您可以通过设置外键的相关名称属性来更改该访问者的名称。

相关问题