Djangoでいくつかのフィールドを一意として定義する方法はありますか?
(ジャーナルの)ボリュームのテーブルがあり、同じジャーナルに複数のボリューム番号が必要ないようにします。
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
unique = True
フィールドとjournal_id
フィールドにvolume_number
を属性として配置しようとしましたが、機能しません。
nique_together と呼ばれる簡単な解決策があります。
例:
class MyModel(models.Model):
field1 = models.CharField(max_length=50)
field2 = models.CharField(max_length=50)
class Meta:
unique_together = ('field1', 'field2',)
そしてあなたの場合:
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
class Meta:
unique_together = ('journal_id', 'volume_number',)
代わりに UniqueConstraint
オプションとともに constraints
を使用してください。将来的に廃止される可能性のあるunique_together
よりも多くの機能を提供します。
例:
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name="Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['journal_id', 'volume_number'], name='name of constraint')
]