Existe-t-il un moyen de définir quelques champs comme uniques dans Django?
J'ai un tableau des volumes (de revues) et je ne veux pas plus d'un numéro de volume pour le même journal.
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)
J'ai essayé de mettre unique = True
comme attribut dans les champs journal_id
et volume_number
mais cela ne fonctionne pas.
python
django
django-models
Giovanni Di Milia
la source
la source
UNIQUE
contrainte devrait interdire les non-NULL
valeurs en double , mais autoriser plusieursNULL
valeurs (voir draft wiscorp.com/sql_2003_standard.zip , Framework, p. 22). Si vous voulez que votre contrainte unique interdise plusieurs valeurs nulles, vous faites probablement quelque chose de mal, comme utiliserNULL
comme valeur significative. N'oubliez pas que le champ nullable indique "Nous n'avons pas toujours de valeur pour ce champ mais quand nous le faisons, il doit être unique.".unique_together
contraintes multiples ? Par exemple - quand je veux que les colonnes de mode soient uniques dans la portée du parent? Eh bien, cette propriété est en fait un tuple lui - même, voir: docs.djangoproject.com/en/1.4/ref/models/options/... Donc , votre contrainte devrait être plus explicitement écrit:unique_together = (('journal_id', 'volume_number',),)
.Django 2.2+
L'utilisation des
constraints
fonctionnalitésUniqueConstraint
est préférable à unique_together .De la documentation Django pour
unique_together
:Par exemple:
la source
UniqueConstraint
mais je deviens bizarrepsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already exists
quand je passe à Postgres