>  기사  >  백엔드 개발  >  Django에서 OneToOneField()와 ForeignKey()의 차이점은 무엇이며, 역관계는 어떻게 작동합니까?

Django에서 OneToOneField()와 ForeignKey()의 차이점은 무엇이며, 역관계는 어떻게 작동합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-07 00:34:02493검색

What is the difference between OneToOneField() and ForeignKey() in Django, and how do their reverse relationships behave?

Django의 OneToOneField() 대 ForeignKey(): 구별 이해

Django는 두 가지 관계형 필드 유형인 OneToOneField()와 ForeignKey(()를 제공합니다. ), 모델 간의 관계를 설정합니다. 최적의 모델 설계를 위해서는 이러한 두 필드 유형 간의 주요 차이점을 이해하는 것이 중요합니다.

OneToOneField():

OneToOneField()는 두 필드 유형 간의 일대일 관계를 정의합니다. 두 모델은 한 모델의 인스턴스가 다른 모델의 단일 인스턴스에만 관련될 수 있음을 의미합니다. Unique=True인 ForeignKey()와 유사하게 OneToOneField()는 관계의 고유성을 보장합니다. 그러나 OneToOneField() 관계의 "역" 측은 다른 모델의 단일 관련 객체를 직접 반환합니다.

ForeignKey():

ForeignKey()는 모델 간의 다대일 관계로, 한 모델의 여러 인스턴스를 다른 모델의 단일 인스턴스와 연결할 수 있습니다. OneToOneField()와 마찬가지로 Unique=True를 지정하면 ForeignKey()가 관계의 고유성을 강화합니다. OneToOneField()와 달리 ForeignKey() 관계의 "역" 측은 단일 개체가 아닌 QuerySet을 반환합니다.

예:

두 가지 모델 예를 고려해보세요.

  • 자동차 모델: OneToOneField 활용(엔진)
  • Car2 모델: ForeignKey 채용(Engine2, Unique=True)

Python prepare.py 셸에서 다음 명령을 실행하면 관계 동작의 차이점을 확인할 수 있습니다.

OneToOneField 예:

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

Unique=True인 ForeignKey 예:

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

OneToOneField() 예에서 "역방향" 관련 객체(e.car)에 액세스하면 단일 Car 인스턴스를 검색하는 반면 ForeignKey( ) 예를 들어, "역방향" 관련 QuerySet(e2.car2_set.all())에 액세스하면 연관된 모든 Car2 인스턴스가 반환됩니다.

이러한 차이점을 이해하면 개발자는 내부의 특정 관계 요구 사항에 따라 적절한 관계형 필드 유형을 선택할 수 있습니다. Django 모델을 사용합니다.

위 내용은 Django에서 OneToOneField()와 ForeignKey()의 차이점은 무엇이며, 역관계는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.