DjangoOneToOneField和ForeignKey之间有什么区别
OneToOneField(SomeModel)和ForeignKey(SomeModel,unique=True)之间的差异,如《Django最终指南》中所述:
OneToOneField
一对一的关系。从概念上讲,这类似于使用
unique=True的ForeignKey,但是;反向;关系的一侧将直接返回单个对象
与OneToOneField”相反;反向;关系,一个外键;反向;关系返回一个QuerySet
范例
例如,如果我们有以下两种型号(完整型号代码如下):
汽车车型使用OneToOneField(发动机)Car2车型使用ForeignKey(Engine2,unique=True)
从python manage.py shell中执行以下操作:
OneToOneField示例
>&燃气轮机&燃气轮机;从testapp.models进口汽车、发动机
&燃气轮机&燃气轮机&燃气轮机;c=Car.objects.get(name='Audi')
&燃气轮机&燃气轮机&燃气轮机;e=Engine.objects.get(name='Diesel')
&燃气轮机&燃气轮机&燃气轮机;e、 汽车
<;汽车:奥迪>;
ForeignKey带有unique=True示例
>&燃气轮机&燃气轮机;从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