Есть ли способ определить пару полей как уникальных в 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
но он не работает.
python
django
django-models
Джованни ди Милия
источник
источник
UNIQUE
ограничение должно запрещать дублирование ненулевыхNULL
значений, но допускает множественныеNULL
значения (см. Черновик wiscorp.com/sql_2003_standard.zip , Framework, стр. 22). Если вы хотите, чтобы ваше уникальное ограничение запрещало множественные нулевые значения, вы, вероятно, делаете что-то неправильно, например, используетеNULL
в качестве значащего значения. Помните, в пустом поле указано: «У нас не всегда есть значение для этого поля, но когда мы делаем это, оно должно быть уникальным».unique_together
ограничений? Например - когда я хочу, чтобы столбцы режима были уникальными в родительской области? Ну, это свойство на самом деле сам кортеж, см: docs.djangoproject.com/en/1.4/ref/models/options/... Так что ваше ограничение должно быть более явным образом записать в виде:unique_together = (('journal_id', 'volume_number',),)
.Джанго 2.2+
Использование
constraints
функцийUniqueConstraint
предпочтительнее, чем unique_together .Из документации Django для
unique_together
:Например:
источник
UniqueConstraint
но яpsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already exists