¿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 = Truecomo atributo en los campos journal_idy volume_numberno funciona.
python
django
django-models
Giovanni Di Milia
fuente
fuente

UNIQUErestricción no debe permitirNULLvalores no duplicados , sino permitirNULLvalores 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 usarloNULLcomo un valor significativo. Recuerde, el campo anulable dice "No siempre tenemos un valor para ese campo, pero cuando lo hagamos debe ser único".unique_togetherrestricciones 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
constraintscaracterísticasUniqueConstraintsobre unique_together .De la documentación de Django para
unique_together:Por ejemplo:
fuente
UniqueConstraintpero me pongo raropsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already existscuando me cambio a Postgres