django OneToOneField和ForeignKey有什么区别?

django OneToOneField和ForeignKey有什么区别?,第1张

django OneToOneField和ForeignKey有什么区别?

请注意,

oneToOneField(SomeModel)
和之间存在一些差异
ForeignKey(SomeModel, unique=True)
。如《 Django权威指南》所述:

一对一

一对一的关系。从概念上讲,这与

ForeignKeywith
相似
unique=True
,但是关系的“反向”侧将直接返回单个对象。

OneToOneField
“反向”关系相反,
ForeignKey
“反向”关系返回
a QuerySet


例如,如果我们有以下两个模型(下面是完整的模型代码):

  1. Car
    模型用途
    oneToOneField(Engine)
  2. Car2
    模型用途
    ForeignKey(Engine2, unique=True)

从内部

python manage.py shell
执行以下 *** 作:

oneToOneField 例

>>> from testapp.models import Car, Engine>>> c = Car.objects.get(name='Audi')>>> e = Engine.objects.get(name='Diesel')>>> e.car<Car: Audi>

ForeignKey与unique=True例子

>>> from testapp.models import Car2, Engine2>>> c2 = Car2.objects.get(name='Mazda')>>> e2 = Engine2.objects.get(name='Wankel')>>> e2.car2_set.all()[<Car2: Mazda>]

型号代码

from django.db import modelsclass Engine(models.Model):    name = models.CharField(max_length=25)    def __unipre__(self):        return self.nameclass Car(models.Model):    name = models.CharField(max_length=25)    engine = models.oneToOneField(Engine)    def __unipre__(self):        return self.nameclass Engine2(models.Model):    name = models.CharField(max_length=25)    def __unipre__(self):        return self.nameclass Car2(models.Model):    name = models.CharField(max_length=25)    engine = models.ForeignKey(Engine2, unique=True, on_delete=models.CASCADE)    def __unipre__(self):        return self.name


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4908341.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存