django OneToOneField 和 ForeignKey 有什么区别? [英] What's the difference between django OneToOneField and ForeignKey?
问题描述
Django OneToOneField
和 ForeignKey
有什么区别?
OneToOneField(SomeModel)
和 ForeignKey(SomeModel, unique=True)
之间的差异,如Django 权威指南:
OneToOneField
一对一的关系.从概念上讲,这类似于带有 unique=True
的 ForeignKey
,但反向"不相同.关系的一侧将直接返回单个对象.
与 OneToOneField
相比,反向"关系,一个 ForeignKey
反向";关系返回一个 QuerySet
.
示例
例如,如果我们有以下两个模型(完整模型代码如下):
Car
模型使用OneToOneField(Engine)
Car2
模型使用ForeignKey(Engine2, unique=True)
从 python manage.py shell
中执行以下内容:
OneToOneField
示例
<预><代码>>>>从 testapp.models 导入汽车,引擎>>>c = Car.objects.get(name='奥迪')>>>e = Engine.objects.get(name='Diesel')>>>电动汽车<汽车:奥迪>ForeignKey
with unique=True
示例
<预><代码>>>>从 testapp.models 导入 Car2, Engine2>>>c2 = Car2.objects.get(name='马自达')>>>e2 = Engine2.objects.get(name='Wankel')>>>e2.car2_set.all()[<Car2:马自达>]型号代码
from django.db 导入模型类引擎(模型.模型):名称 = 模型.CharField(max_length=25)def __unicode__(self):返回 self.name类汽车(模型.模型):名称 = 模型.CharField(max_length=25)引擎 = 模型.OneToOneField(引擎)def __unicode__(self):返回 self.name类 Engine2(models.Model):名称 = 模型.CharField(max_length=25)def __unicode__(self):返回 self.name类 Car2(models.Model):名称 = 模型.CharField(max_length=25)引擎=models.ForeignKey(Engine2, unique=True, on_delete=models.CASCADE)def __unicode__(self):返回 self.name
What's the difference between Django OneToOneField
and ForeignKey
?
Differences between OneToOneField(SomeModel)
and ForeignKey(SomeModel, unique=True)
as stated in The Definitive Guide to Django:
OneToOneField
A one-to-one relationship. Conceptually, this is similar to a
ForeignKey
withunique=True
, but the "reverse" side of the relation will directly return a single object.
In contrast to the OneToOneField
"reverse" relation, a ForeignKey
"reverse" relation returns a QuerySet
.
Example
For example, if we have the following two models (full model code below):
Car
model usesOneToOneField(Engine)
Car2
model usesForeignKey(Engine2, unique=True)
From within python manage.py shell
execute the following:
OneToOneField
Example
>>> from testapp.models import Car, Engine
>>> c = Car.objects.get(name='Audi')
>>> e = Engine.objects.get(name='Diesel')
>>> e.car
<Car: Audi>
ForeignKey
with unique=True
Example
>>> from testapp.models import Car2, Engine2
>>> c2 = Car2.objects.get(name='Mazda')
>>> e2 = Engine2.objects.get(name='Wankel')
>>> e2.car2_set.all()
[<Car2: Mazda>]
Model Code
from django.db import models
class Engine(models.Model):
name = models.CharField(max_length=25)
def __unicode__(self):
return self.name
class Car(models.Model):
name = models.CharField(max_length=25)
engine = models.OneToOneField(Engine)
def __unicode__(self):
return self.name
class Engine2(models.Model):
name = models.CharField(max_length=25)
def __unicode__(self):
return self.name
class Car2(models.Model):
name = models.CharField(max_length=25)
engine = models.ForeignKey(Engine2, unique=True, on_delete=models.CASCADE)
def __unicode__(self):
return self.name
这篇关于django OneToOneField 和 ForeignKey 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!