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。 

  • 相关阅读:
    Java的常用API之System类简介
    Java的常用API之Date类简介
    Java的常用API之Object类简介
    数据库知识总结(全)
    学习:浏览器访问网站的总流程
    学习:TCP/UDP协议分析(TCP四次挥手)
    学习:TCP/UDP协议分析(TCP三次握手)
    学习:ICMP协议
    实现:ARP探测存活主机
    学习:ARP协议/数据包分析
  • 原文地址:https://www.cnblogs.com/liyqiang/p/7662800.html
Copyright © 2011-2022 走看看