1対1の関係
1対1の関係を定義するには、 OneToOneField を使用します。
この例では、Place
はオプションでRestaurant
にすることができます。
以下は、PythonAPI機能を使用して実行できる操作の例です。
いくつかの場所を作成します。
レストランを作成します。 「親」オブジェクトをこのオブジェクトの主キーとして渡します。
レストランはその場所にアクセスできます:
可能であれば、プレイスはそのレストランにアクセスできます。
p2には関連するレストランがありません:
hasattr
を使用して、例外キャッチの必要性を回避することもできます。
代入表記で場所を設定します。 場所はレストランの主キーであるため、保存すると新しいレストランが作成されます。
逆方向の割り当てを使用して、場所を再度設定します。
オブジェクトを1対1の関係に割り当てる前に、オブジェクトを保存する必要があることに注意してください。 たとえば、保存されていないPlace
でRestaurant
を作成すると、ValueError
が発生します。
Restaurant.objects.all()は、PlacesではなくRestaurantsを返します。 2つのレストランがあることに注意してください-AceHardware the Restaurantは、r.place = p2の呼び出しで作成されました。
Place.objects.all()は、レストランがあるかどうかに関係なく、すべてのプレイスを返します。
リレーションシップ全体のルックアップを使用してモデルをクエリできます。
これも逆に機能します。
レストランにウェイターを追加します。
ウェイターに質問する: