Existe uma maneira de definir alguns campos como únicos no Django?
Tenho uma tabela de volumes (de diários) e não quero mais do que um número de volume para o mesmo diário.
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)
Eu tentei colocar unique = True
como atributo nos campos journal_id
e volume_number
mas não funciona.
python
django
django-models
Giovanni Di Milia
fonte
fonte
UNIQUE
restrição deve proibir não-NULL
valores duplicados , mas permitir váriosNULL
valores (consulte o rascunho wiscorp.com/sql_2003_standard.zip , Framework, p. 22). Se você deseja que sua restrição exclusiva não permita vários valores nulos, provavelmente está fazendo algo errado, como usarNULL
como um valor significativo. Lembre-se, o campo anulável diz "Nem sempre temos um valor para esse campo, mas quando o fazemos, ele deve ser único".unique_together
restrições? Por exemplo - quando eu quero que as colunas de modo sejam exclusivas no escopo do pai? Bem, esta propriedade é realmente uma própria tupla, consulte: docs.djangoproject.com/en/1.4/ref/models/options/... Portanto, sua restrição deve ser mais explicitamente escrito como:unique_together = (('journal_id', 'volume_number',),)
.Django 2.2+
O uso dos
constraints
recursosUniqueConstraint
é preferível a unique_together .Na documentação do Django para
unique_together
:Por exemplo:
fonte
UniqueConstraint
, mas eu recebo estranhopsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already exists
quando eu mudar para Postgres