Django ORM OneToOneField

一對一關係

一對一關係與多對一關係很是類似。若是你在模型中定義一個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

相關文章
相關標籤/搜索