¿Hay alguna manera de definir un par de campos como únicos en Django?
Tengo una tabla de volúmenes (de revistas) y no quiero más de un número de volumen para la misma revista.
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)
Traté de poner unique = True
como atributo en los campos journal_id
y volume_number
no funciona.
python
django
django-models
Giovanni Di Milia
fuente
fuente
UNIQUE
restricción no debe permitirNULL
valores no duplicados , sino permitirNULL
valores múltiples (consulte el borrador wiscorp.com/sql_2003_standard.zip , Framework, p. 22). Si desea que su restricción única no permita múltiples valores nulos, probablemente esté haciendo algo mal, como usarloNULL
como un valor significativo. Recuerde, el campo anulable dice "No siempre tenemos un valor para ese campo, pero cuando lo hagamos debe ser único".unique_together
restricciones múltiples ? Por ejemplo, ¿cuándo quiero que las columnas de modo sean únicas en el ámbito del padre? Pues bien, esta propiedad es en realidad una tupla en sí, ver: docs.djangoproject.com/en/1.4/ref/models/options/... Así que su limitación debe ser escrito de manera más explícita como:unique_together = (('journal_id', 'volume_number',),)
.Django 2.2+
Se prefiere usar las
constraints
característicasUniqueConstraint
sobre unique_together .De la documentación de Django para
unique_together
:Por ejemplo:
fuente
UniqueConstraint
pero me pongo raropsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already exists
cuando me cambio a Postgres