Haf*_*fiz 22 django django-models
Django models.ForeignKey(Modelname, unique=True)和models.OneToOneFieldDjango有什么不同?
我应该在哪里使用models.OneToOneField和models.ForeignKey(Modelname, unique=True)?
Ala*_*air 47
一个OneToOneField非常类似于ForeignKey用unique=True.除非您正在进行多表继承,在这种情况下您必须使用OneToOneField,唯一真正的区别是用于访问相关对象的api.
在Django文档中它说:
从概念上讲,这类似于
ForeignKeywithunique=True,但关系的"反向"方面将直接返回单个对象.
让我们用一个例子来说明这意味着什么.考虑两个模型,Person和Address.我们假设每个人都有一个独特的地址.
class Person(models.Model):
name = models.CharField(max_length=50)
address = models.ForeignKey('Address', unique=True)
class Address(models.Model):
street = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
如果您从一个人开始,您可以轻松访问该地址:
address = person.address
Run Code Online (Sandbox Code Playgroud)
但是,如果您从一个地址开始,您必须通过person_set经理来获取该人.
person = address.person_set.get() # may raise Person.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
现在让我们ForeignKey用a 代替OneToOneField.
class Person(models.Model):
name = models.CharField(max_length=50)
address = models.OneToOneField('Address')
class Address(models.Model):
street = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
如果您从一个人开始,您可以以相同的方式访问该地址:
address = person.address
Run Code Online (Sandbox Code Playgroud)
现在,我们可以更轻松地从地址访问此人.
person = address.person # may raise Person.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14664 次 |
| 最近记录: |