Quiero asegurarme de que un objeto sea único y arrojar un error cuando un usuario intenta guardarlo (por ejemplo, a través del administrador) de no ser así? Por único, quiero decir que algunos de los atributos del objeto pueden tener los mismos valores que los de otros objetos, pero no todos PUEDEN ser idénticos a los valores de otros objetos.objetos únicos SECADOS en Django
Si no me equivoco, yo puedo hacer esto de esta manera:
class Animal(models.Model):
common_name = models.CharField(max_length=150)
latin_name = models.CharField(max_length=150)
class Meta:
unique_together = ("common_name", "latin_name")
Pero entonces cada vez que refactorizar el modelo (por ejemplo, para añadir un nuevo campo, o para cambiar el nombre de un campo existente), También tengo que editar la lista de campos en el paréntesis asignado a unique_together. Con un modelo simple, está bien, pero con uno sustancial, se convierte en una verdadera molestia durante la refactorización.
¿Cómo puedo evitar tener que repetir escribiendo la lista de nombres de campo en el unique_together entre paréntesis? ¿Hay alguna manera de pasar la lista de los campos del modelo a una variable y asignar esa variable a unique_together en su lugar?
+1 - grande pregunta. No creo que puedas, pero estoy interesado en escuchar las opiniones de los demás. –
+1 - Realmente es interesante si alguien puede encontrar una buena solución. Lo intenté pero no pude hacerlo a través de la reflexión, porque no puedes leer las propiedades de la clase Animal (lo cual es obvio porque Animal no está completamente definido en ese momento). – FlorianH
jtiai on irc: //irc.freenode.net/django amablemente se tomó un tiempo para discutir la pregunta y sugirió que podía 'agregar mi propia clase' AllUniqueModel ', heredar el' Modelo 'estándar y hacer algo de magia de metaclass para inyectar todos los campos en unique_togerther después de que sean procesados por el procedimiento de creación estándar. ' No estoy del todo seguro de lo que jtiai quiso decir con eso, pero parece una solución más complicada de lo que esperaba. – sampablokuper