zoukankan      html  css  js  c++  java
  • 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。 

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/liyqiang/p/7662800.html
Copyright © 2011-2022 走看看