Django ORM OneToOneField

一对一关系

一对一关系与多对一关系很是类似。若是你在模型中定义一个OneToOneField,该模型的实例将能够经过该模型的一个简单属性访问关联的模型。html

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)

2、 查询python

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

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

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

相关文章
相关标签/搜索