django OneToOneField和ForeignKey有什么区别?

DjangoOneToOneFieldForeignKey之间有什么区别

OneToOneField(SomeModel)ForeignKey(SomeModel,unique=True)之间的差异,如《Django最终指南》中所述:

OneToOneField

一对一的关系。从概念上讲,这类似于使用unique=True的ForeignKey,但是;反向;关系的一侧将直接返回单个对象

OneToOneField”相反;反向;关系,一个外键;反向;关系返回一个QuerySet

范例

例如,如果我们有以下两种型号(完整型号代码如下):

  1. 汽车车型使用OneToOneField(发动机)
  2. Car2车型使用ForeignKey(Engine2,unique=True)

python manage.py shell中执行以下操作:

OneToOneField示例

&gt&燃气轮机&燃气轮机;从testapp.models进口汽车、发动机
&燃气轮机&燃气轮机&燃气轮机;c=Car.objects.get(name='Audi')
&燃气轮机&燃气轮机&燃气轮机;e=Engine.objects.get(name='Diesel')
&燃气轮机&燃气轮机&燃气轮机;e、 汽车
<汽车:奥迪>

ForeignKey带有unique=True示例

&gt&燃气轮机&燃气轮机;从testapp.models导入Car2,Engine2
&燃气轮机&燃气轮机&燃气轮机;c2=Car2.objects.get(name='Mazda')
&燃气轮机&燃气轮机&燃气轮机;e2=Engine2.objects.get(name='Wankel')
&燃气轮机&燃气轮机&燃气轮机;e2.car2_set.all()
[<Car2:Mazda>]

模型代码

来自django.db导入模型的


类别发动机(型号.型号):
name=models.CharField(最大长度=25)
def ___; unicode(自):
返回self.name
等级车(型号.型号):
name=models.CharField(最大长度=25)
发动机=型号。OneToOneField(发动机)
def ___; unicode(自):
返回self.name
等级Engine2(型号.Model):
name=models.CharField(最大长度=25)
def ___; unicode(自):
返回self.name
Car2类(型号.型号):
name=models.CharField(最大长度=25)
engine=models.ForeignKey(Engine2,unique=True,on_delete=models.CASCADE)
def ___; unicode(自):
返回self.name

发表评论