Czy istnieje sposób na zdefiniowanie kilku pól jako unikalnych w Django?
Mam tabelę woluminów (dzienników) i nie chcę więcej niż jednego numeru woluminu dla tego samego dziennika.
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)
Starałem się umieścić unique = True
jako atrybut w polach journal_id
i volume_number
ale to nie działa.
python
django
django-models
Giovanni Di Milia
źródło
źródło
UNIQUE
ograniczenie powinno uniemożliwiać powielanie innychNULL
wartości, ale zezwalać na wieleNULL
wartości (patrz szkic wiscorp.com/sql_2003_standard.zip , Framework, s. 22). Jeśli chcesz, aby twoje unikalne ograniczenie uniemożliwiało wiele wartości zerowych, prawdopodobnie robisz coś złego, na przykład używającNULL
wartości znaczącej. Pamiętaj, że pole zerowalne mówi „Nie zawsze mamy wartość dla tego pola, ale kiedy to robimy, musi być unikalne”.unique_together
ograniczeniami? Na przykład - kiedy chcę, aby kolumny trybu były unikalne w zakresie elementu nadrzędnego? Cóż, ta właściwość jest w rzeczywistości sama krotka, patrz: docs.djangoproject.com/en/1.4/ref/models/options/... Więc ograniczeniem powinna być bardziej wyraźnie zapisać jako:unique_together = (('journal_id', 'volume_number',),)
.Django 2.2+
Korzystanie z
constraints
funkcjiUniqueConstraint
jest lepsze niż unikalne .Z dokumentacji Django dla
unique_together
:Na przykład:
źródło
UniqueConstraint
ale dziwnie siępsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already exists
przestawiam na Postgres