개발관련/other

django OneToOneField와 ForeignKey의 차이점

Rateye 2021. 12. 11. 15:43
728x90
반응형
질문 : django OneToOneField와 ForeignKey의 차이점은 무엇입니까?

OneToOneFieldForeignKey 의 차이점은 무엇입니까?

답변

OneToOneField(SomeModel)ForeignKey(SomeModel, unique=True) 사이에 약간의 차이가 있다는 것을 알아 두십시오. The Definitive Guide to Django 에서 언급했듯이 :

OneToOneField

일대일 관계. 개념적으로 이것은 unique=True ForeignKey 와 유사하지만 관계의 "reverse"쪽은 단일 객체를 직접 반환합니다.

OneToOneField "reverse"관계와 달리 ForeignKey "reverse"관계는 QuerySet 반환합니다.

예를 들어 다음 두 가지 모델이있는 경우 (아래 전체 모델 코드) :

python manage.py shell 내에서 다음을 실행합니다.

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
출처 : https://stackoverflow.com/questions/5870537/whats-the-difference-between-django-onetoonefield-and-foreignkey
728x90
반응형