Django ORM OneToOneField


一對一關系

一對一關系與多對一關系非常相似。如果你在模型中定義一個OneToOneField,該模型的實例將可以通過該模型的一個簡單屬性訪問關聯的模型。

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)

二、 查詢

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')

“反向”查詢中有所不同。一對一關系中的關聯模型同樣具有一個管理器對象,但是該管理器表示一個單一的對象而不是對象的集合。

一對一的方式原理上是  ForeignKey + unique=True。但是既然是外鍵 那么一對多的反向查詢方式應該和一對一的反向查詢方式相同,而實際上不是這樣的,一對一的反向查詢方式是 obj.persondetail   對象.類名小寫 ,沒有_set。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM