多対1の関係
多対1の関係を定義するには、 ForeignKey を使用します。
以下は、PythonAPI機能を使用して実行できる操作の例です。
いくつかのレポーターを作成します。
記事を作成する:
オブジェクトを外部キー関係に割り当てる前に、オブジェクトを保存する必要があることに注意してください。 たとえば、保存されていないReporter
でArticle
を作成すると、ValueError
が発生します。
Articleオブジェクトは、関連するReporterオブジェクトにアクセスできます。
Reporterオブジェクトを介して記事を作成します。
新しい記事を作成します。
同じ記事を別の記事セットに追加します-移動することを確認します。
間違ったタイプのオブジェクトを追加すると、TypeErrorが発生します。
最後の例では、記事がジョンからポールに移動したことに注意してください。
関連するマネージャーは、フィールドルックアップもサポートしています。 APIは、必要な限り、関係を自動的に追跡します。 関係を区切るには、二重下線を使用します。 これは、必要なだけ深く機能します。 制限はありません。 例えば:
完全一致はここで暗示されます:
関連フィールドを2回照会します。 これは、WHERE句のAND条件に変換されます。
関連するルックアップでは、主キー値を指定するか、関連するオブジェクトを明示的に渡すことができます。
インスタンスのリテラルリストの代わりにクエリセットを使用することもできます。
反対方向のクエリ:
反対方向のカウントは、distinct()と連動して機能します。
クエリは円を描くように回ることができます。
レポーターを削除すると、彼の記事は削除されます(ForeignKeyが django.db.models.ForeignKey.on_delete をCASCADE
に設定して定義されていると仮定します。これがデフォルトです)。
クエリでJOINを使用して削除できます。