码迷,mamicode.com
首页 > Web开发 > 详细

Django ORM OneToOneField

时间:2017-10-13 20:11:22      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:logs   管理器   color   documents   查询   多对一   for   person   原理   

一对一关系

一对一关系与多对一关系非常相似。如果你在模型中定义一个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):
    # 前向查询
    ret = models.PersonDetail.objects.get(id=1)
    # 这里的person是表中的关联外键的字段并非类名字
    print(ret.person)  # Person object 封装的Person对象
    print(ret.person.name)

    # 反向查询
    obj = models.Person.objects.get(id=1)
    # persondetail 类名字的小写
    print(obj.persondetail)  # PersonDetail object
    print(obj.persondetail.email, obj.persondetail.age)
    return HttpResponse(OK)

“反向”查询中有所不同。一对一关系中的关联模型同样具有一个管理器对象,但是该管理器表示一个单一的对象而不是对象的集合。

一对一的方式原理上是  ForeignKey + unique=True。但是既然是外键 那么一对多的反向查询方式应该和一对一的反向查询方式相同,而实际上不是这样的,一对一的反向查询方式是 obj.persondetail   对象.类名小写 ,没有_set。 

Django ORM OneToOneField

标签:logs   管理器   color   documents   查询   多对一   for   person   原理   

原文地址:http://www.cnblogs.com/liyqiang/p/7662800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!