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 つのモデルの例を考えてみましょう。
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 サイトの他の関連記事を参照してください。