>  기사  >  백엔드 개발  >  Django에서 `unique=True`를 사용하는 `OneToOneField()`와 `ForeignKey()`의 주요 차이점은 무엇입니까?

Django에서 `unique=True`를 사용하는 `OneToOneField()`와 `ForeignKey()`의 주요 차이점은 무엇입니까?

DDD
DDD원래의
2024-11-12 13:01:01465검색

What is the key difference between `OneToOneField()` and `ForeignKey()` with `unique=True` in Django?

Django의 OneToOneField() 대 ForeignKey()

OneToOneField() 및 ForeignKey()는 모델 간의 관계를 설정하는 데 사용되는 두 개의 Django 모델 필드입니다. 두 필드 모두 일대일 관계를 생성할 수 있지만 동작에는 미묘한 차이가 있습니다.

OneToOneField()

  • 개념적 유사성: 유사 고유=True인 ForeignKey.
  • "Reverse" Relation: 관계 반대편의 단일 객체를 직접 반환합니다.

ForeignKey() with Unique=True

  • 개념적 차이: 설정하여 일대일 관계를 지정합니다. Unique=True.
  • "역방향" 관계: 관계 반대편에 있는 QuerySet을 반환합니다.

다음을 고려하세요. 다음 모델:

# OneToOneField example
class Car(models.Model):
    name = models.CharField(max_length=25)
    engine = models.OneToOneField(Engine)

# ForeignKey with unique=True example
class Car2(models.Model):
    name = models.CharField(max_length=25)
    engine = models.ForeignKey(Engine2, unique=True)

Python에서 shell:

# OneToOneField
car = Car.objects.get(name='Audi')
engine = Engine.objects.get(name='Diesel')
print(engine.car)  # Outputs <Car: Audi>

# ForeignKey with unique=True
car2 = Car2.objects.get(name='Mazda')
engine2 = Engine2.objects.get(name='Wankel')
print(engine2.car2_set.all())  # Outputs [<Car2: Mazda>]

OneToOneField의 "역방향" 관계(engine.car)는 단일 객체(Car 인스턴스)를 반환하는 반면, Unique=True의 "역방향" 관계(engine2.car2_set.all( )) QuerySet(해당 Engine2 인스턴스와 관련된 모든 Car2 인스턴스 목록)을 반환합니다.

위 내용은 Django에서 `unique=True`를 사용하는 `OneToOneField()`와 `ForeignKey()`의 주요 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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