ホームページ  >  記事  >  バックエンド開発  >  Django の `OneToOneField()` と `unique=True` を使用した `ForeignKey()` の主な違いは何ですか?

Django の `OneToOneField()` と `unique=True` を使用した `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() は、モデル間の関係を確立するために使用される 2 つの Django モデル フィールドです。どちらのフィールドも 1 対 1 の関係を作成できますが、その動作には微妙な違いがあります。

OneToOneField()

  • 概念的な類似性: 以下に似ています。 unique=True のForeignKey。
  • "Reverse" Relation: 関係の反対側にある単一のオブジェクトを直接返します。unique の

ForeignKey() =True

  • 概念的な違い: unique=True を設定することで 1 対 1 の関係を指定します。
  • 「逆」関係 : 関係の反対側の 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 シェル:

# 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) は 1 つのオブジェクト (Car インスタンス) を返しますが、unique=True のForeignKey の「逆」関係 (engine2.car2_set.all()) は QuerySet を返します。 (その Engine2 インスタンスに関連するすべての Car2 インスタンスのリスト)。

以上がDjango の `OneToOneField()` と `unique=True` を使用した `ForeignKey()` の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。