複数のカラムの組み合わせに対してユニーク制約をつけたい事があります。この制約は一般的に”複合ユニーク制約”といわれます。
今回は、Djangoで複合ユニーク制約を設定する方法を解説します。
複合ユニーク制約をつける方法
以下のSampleクラスは field1 と field2 のカラムに対して複合ユニーク制約をつけた例です。
MetaクラスのconstraintsオプションとUniqueConstraintを使う事で複合ユニーク制約をつける事ができます。
from django.db import models
class Sample(models.Model):
field1 = models.CharField(max_length=100)
field2 = models.CharField(max_length=100)
class Meta:
constraints = [
models.UniqueConstraint(fields=['field1', 'field2'], name='unique_constraint')
]
constraintsについて
constraintsはメタデータオプションの一つで、DBの制約を定義できます。
モデルに定義したい制約をリスト形式で設定します。
UniqueConstraintについて
DBにユニーク制約を作成する事ができます。
キーワード引数のfieldsには、複合ユニークにしたいフィールド名のリストを設定します。
キーワード引数のnameには、制約の名前を設定できます。DBに制約名が反映されます。常に一意の名前にする必要があります。
補足 unique_togetherについて
メタデータオプションにunique_togetherを使って複合ユニーク制約をつける事もできますが、今後、非推奨になる可能性があります。
constrainsとUniqueConstraintを使って実装することをおすすめします。
コメントを残す