ホームページ >バックエンド開発 >Python チュートリアル >Django の OneToOneField() とForeignKey() の違いは何ですか?また、それらの逆の関係はどのように動作しますか?

Django の OneToOneField() とForeignKey() の違いは何ですか?また、それらの逆の関係はどのように動作しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-07 00:34:02570ブラウズ

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

Django の OneToOneField() とForeignKey() : 違いを理解する

Django は、OneToOneField() とForeignKey() という 2 つのリレーショナル フィールド タイプを提供します。 )、モデル間の関係を確立します。これら 2 つのフィールド タイプの主な違いを理解することは、最適なモデル設計にとって重要です。

OneToOneField():

OneToOneField() は、次の間の 1 対 1 の関係を定義します。これは、1 つのモデルのインスタンスが別のモデルの 1 つのインスタンスにのみ関連付けられることを意味します。 unique=True を指定したForeignKey()と同様に、OneToOneField()はリレーションシップの一意性を保証します。ただし、OneToOneField() 関係の「逆」側は、他のモデルから単一の関連オブジェクトを直接返します。

ForeignKey():

ForeignKey() は、モデル間の多対 1 の関係により、1 つのモデルの複数のインスタンスを別のモデルの 1 つのインスタンスに関連付けることができます。 OneToOneField() と同様に、 unique=True を指定することにより、ForeignKey() は関係の一意性を強制します。 OneToOneField() とは異なり、ForeignKey() リレーションシップの「逆」側は、単一のオブジェクトではなく、QuerySet を返します。

例:

2 つのモデルの例を考えてみましょう。

  • 車種: OneToOneField(Engine) を使用
  • Car2 モデル: ForeignKey(Engine2, unique=True) を使用

Python manage.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 中国語 Web サイトの他の関連記事を参照してください。

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