一对一关系
一对一关系与多对一关系非常相似。如果你在模型中定义一个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
原文地址:http://www.cnblogs.com/liyqiang/p/7662800.html