2009-10-29 68 views
2

我有以下型號訪問相關的正確方法對象

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是相同的價值,但我敢肯定這是做了不正確的方法。

感謝
安德魯

回答

4

你可以這樣做:

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

這應該讓你中一個數據塊的查詢您的所有電話號碼。

默認情況下,您可以通過使用「全部小寫的型號名稱」後跟「_set」來訪問通過「對面」側的外鍵進行相關的模型。您可以通過設置外鍵的相關名稱屬性來更改該訪問者的名稱。

+1

無需檢查長度: Employee.objects.select_releated()得到(ID = YOUR_ID).phonenumber_set.all () – 2009-10-30 01:00:57

+0

如果您執行一個不存在的對象,它會引發異常。你應該總是做一個過濾器,並檢查長度或包裝在嘗試/除了獲得。你的回答很好,但你的評論是不好的建議。 – 2009-10-30 03:14:27

+0

我知道有一個相關的方法來做到這一點,我突然想不出來。謝謝你的幫助。 – 2009-10-30 04:03:05

5

你可以(也應該)不知道外鍵的字段進行篩選:

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

的確,您甚至不需要比較id字段,模型會自動執行此操作。 – Soviut 2009-10-30 01:13:30