Django外鍵讓我瘋狂!我是Django的新手,我一直在研究一個解決方案,我知道這個解決方案必須是三個星期內沒有成功的簡單問題。我已經搜索了我的問題的答案,但很少有幫助。Django:使用多個外鍵模型
我有類似以下內容來支持每個人的有多個電話號碼和地址的能力模型:
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
<...>
class Phone(models.Model):
person = models.ForeignKey(Person)
<...>
number = PhoneNumberField()
class Address(models.Model):
person = models.ForeignKey(Person)
<...>
zipcode = models.CharField(max_length=10)
我有兩個問題:
1)當加入的人,電話,和地址是最有效的方式嗎?
person = Person.objects.get(pk=1)
phone = Phone.objects.get(person=person)
address = Address.objects.get(person=person)
2)當將這個模型序列化到JSON時,我使用了Stuff Django序列化器的版本1.1.0。以下代碼僅返回Person數據,但我需要Person和相關的Phone和Address。哪裏不對?
print serializers.serialize('json', Person.objects.all(), indent=4, relations=('phone', 'address',))
非常感謝你給予的任何幫助!
編輯:爲了澄清,我相信我不能複製以下使用Django的ORM是我的問題(或誤解)根:
select * from person
left join phone
on phone.person_id = person.id
left join address
on address.person_id = person.id
where person.id = 1
謝謝你的幫助。但 '手機= person.phone_set.all()' 給了我以下錯誤: 'AttributeError的: '人' 對象有沒有屬性「phone_set'' 什麼不同嗎? – FlashBIOS
我讀過[select_related](https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related),但我無法將其應用於我的情況。我可以用它來從電話到人,但不是從更合理的人到電話和地址。我錯過了什麼? – FlashBIOS
閱讀Pep 8(下次,如果您打算詢問打字錯誤,請直接複製模型) 影響反向關係的另一件事是外鍵聲明中的「related_name」設置。 –