Django 모델 의 OneToOne Field 와 ForeignKey 는 어떤 차이 가 있 습 니까?

25380 단어 Python
Stackoverflow 에 댓 글 을 달 아서 이 질문 을 했 어 요.http://stackoverflow.com/questions/5870537/whats-the-difference-between-django-onetoonefield-and-foreignkey), 곧 누군가가 대답 했다.
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

좋은 웹페이지 즐겨찾기