Django 모델 의 OneToOne Field 와 ForeignKey 는 어떤 차이 가 있 습 니까?
25380 단어 Python
ForeignKey 는 one - to - many 라 고 하 며 한 차 의 예 를 들 었 다. 두 개의 부품 표 가 있 는데 하 나 는 차륜 표 이 고 다른 하 나 는 엔진 표 이다.두 시 계 는 모두 하나의 car 필드 가 있어 이 부품 에 대응 하 는 차 를 나타 낸다.바퀴 의 경우 여러 개가 하나의 car 에 대응 하 는 상황 이 정상 적 이기 때문에 car 필드 는 ForeignKey 로 표시 해 야 한다.엔진 의 경우 하나의 엔진 이 하나의 car 에 만 대응 할 수 있 기 때문에 원 투 원 필드 를 사용 해 야 합 니 다.
OneToOneField(someModel) 으로 이해 하 다,... ForeignKey(SomeModel, unique=True)。
양자 의 역방향 조 회 는 차이 가 있다.
ForeignKey 역방향 조 회 는 목록 (한 차 에 바퀴 가 여러 개 있 음) 을 되 돌려 줍 니 다.
OneToOne Field 의 역방향 조 회 는 모델 예제 (일대일 관계 때 문) 를 되 돌려 줍 니 다.
또 다른 보충 설명:
Be careful to realize that there are some 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
with unique=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 uses OneToOneField(Engine)
Car2
model uses ForeignKey(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)
def __unicode__(self):
return self.name
다음으로 이동:http://www.redicecn.com/html/blog/Django/2011/0503/271.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.