1. ホーム
  2. パイソン

django モデル ユニークな組み合わせの例

2022-03-02 11:58:58

ユニークトギャザー

このメタデータは非常に重要なものです! これは、データベースでは和集合制約に相当します!

たとえば、名前、生年月日、性別、出身地などを記載したユーザーのテーブルがあるとします。要件は、すべてのユーザーがユニークで重複しないことですが、"Zhang Wei"という名前のユーザーが複数いる場合、どのように区別するのでしょうか。(主キーのユニークさについて私に話さないでください、ここで話しているのはそういうことではありません)

この結合制約を使って、データベースがユーザーを繰り返し追加できないようにすることができます(確率が小さいという話はしないでください)。この制約を Django のモデルでどのように実装するのでしょうか?

使用方法 unique_together という意味です。

<スパン

例えば、こんな感じです。

unique_together = (('name', 'birth_day', 'address'),)


このように、同じ日に生まれたチャン・ウェイが2人いたとしても、出自が違うので、2人のユーザーがいることになります。3つとも同じになると、Djangoによって作成が拒否されます。このメタデータは管理者バックエンドでよく使われ、データベースレベルで強制的に適用されます。

unique_togetherは2次元タプル((xx,xx,xx,...) ,(),(),()...)を取ります。で、その各要素はタプルで、結合一意制約のセットを表し、複数の制約セットを同時に設定することができる。便宜上、制約のセットが1つしかない場合は、単純に1次元の要素を使用することができ、例えば

unique_together = ('name', 'birth_day', 'address')


通常の多対多のフィールドでは、ユニオンは一意には機能しません。