一對一關係與多對一關係很是類似。若是你在模型中定義一個OneToOneField,該模型的實例將能夠經過該模型的一個簡單屬性訪問關聯的模型。html
class Person(models.Model): name = models.CharField(max_length=20) class PersonDetail(models.Model): age = models.IntegerField(10) email = models.EmailField()
# person = models.ForeignKey(Person, unique=True)
person = models.OneToOneField(Person)
2、 查詢python
def one(request):
# 查詢alex的用戶信息 # 前向查詢 ret = models.PersonDetail.objects.get(id=1) # ret = models.PersonDetail.objects.get(id=models.Person.objects.get(name='alex').id)
# 這裏的person是表中的關聯外鍵的字段並不是類名字 print(ret.person) # Person object 封裝的Person對象 print(ret.person.name, ret.age, ret.email)
# 查詢alex的用戶信息 # 反向查詢 obj = models.Person.objects.get(name='alex') # persondetail 類名字的小寫 print(obj.persondetail) # PersonDetail object print(obj.name, obj.persondetail.email, obj.persondetail.age) return HttpResponse('OK')
「反向」查詢中有所不一樣。一對一關係中的關聯模型一樣具備一個管理器對象,可是該管理器表示一個單一的對象而不是對象的集合。django
一對一的方式原理上是 ForeignKey + unique=True。可是既然是外鍵 那麼一對多的反向查詢方式應該和一對一的反向查詢方式相同,而實際上不是這樣的,一對一的反向查詢方式是 obj.persondetail 對象.類名小寫 ,沒有_set。 this