django: forma correcta de manejar un valor NULL único
Estoy usando el siguiente modelo:
class FoodPlanningOnDemand(models.Model):
catspad = models.ForeignKey('Catspad', null=False, blank=False)
cat = models.ForeignKey('Cat', null=True, blank=True),
amount = models.PositiveIntegerField(null=False, blank=False, default=5)
food_limit = models.PositiveIntegerField(null=False, blank=False, default=0)
name = models.CharField(max_length=128, null=True, blank=True)
status = models.BooleanField(default=True, null=False)
class Meta:
unique_together = (('catspad', 'cat'))
El campo gato es algo especial, ya que si es nulo significa que la planificación afecta a todos los gatos. Y como no quiero que una planificación sea un duplicado, tampoco quiero que el valor nulo sea único. Pero Django/Postgres no trata nulo como un valor y, por lo tanto, no activa el error de duplicación.
¿Cómo puedo lograr cambiar esto? ¿Debo crear otro campo? Me estoy quedando sin ideas, gracias por tu ayuda.
------------Respuesta------------
Como han señalado otros en los comentarios, NULL no es un valor
Cuando un índice se declara único, varias filas de la tabla con el mismo No se permiten valores indexados. Los valores nulos no se consideran iguales. Un índice único de varias columnas solo rechazará los casos en los que todos estén indexados las columnas son iguales en varias filas.
ref: https://www.postgresql.org/docs/9.5/static/indexes-unique.html
Si esto no es lo que ySi lo desea, debe crear un gato único que pueda identificarse como todos los gatos, por ejemplo:
all_cats = Cat.objects.create(name='__allcats__', ....)
Entonces puede tomar nota de su clave principal o comparar el campo de nombre con __allcats__ para identificar si FoodPlanningOnDemand es aplicable a todos los gatos o a un solo gato.
Puedes hacer lo mismo con CatsPad
Etiquetas: django-models django postgresql
Artículos relacionados:
android - listview no se actualiza
servicios web: cómo extraer/descifrar el tiempo de caducidad del token web Json emitido externamente
- ios - Pruebas unitarias de Xcode: la clase se implementa en ambos. uno de los dos se usará xctest
- php: mysql obtiene registros que se agregaron en los últimos 10 segundos?
- aprendizaje automático - TensorFlow: comprensión de los parámetros devueltos por evaluación
- ios - RealmSwift: acorte el tiempo de compilación de compilación
- Infraestructura en la nube de ibm: obtenga una lista de los volúmenes de almacenamiento autorizados para un host en particular en SoftLayer
- ios: el servidor de manejo sabe si la aplicación de iPhone se está ejecutando (latido)
- naudio SineWaveProvider32 da clicks al cambiar de Amplitud
- css - Comportamiento de diseño de material angular.... problema de comportamiento de hermanos
- python - colorear celdas en excel con pandas
- javascript - ¿Cómo puedo agregar 1 día a esta función JS?
- Extraño error de PHP: no se puede usar el valor de retorno de la función en el contexto de escritura,
- c++ - Qt: botón - volver desde "help.cpp" a "ventanaprincipal.cpp"
- amazon web services - ¿Cómo conectar un usuario de mysql a un servidor AWS EC2?
- smooch - ¿Cómo aplico los botones de respuesta a los susurros?
- redes: responda con un protocolo no compatible al escribir una pila de red personalizada
Artículos calientes
- medicina china para la bronquitis
- Diferencia entre infección de las vías respiratorias superiores y bronquitis
- ¿Qué causa la epididimitis?
- Criterios diagnósticos de cálculos renales
- ¿Qué medicamento la masturbación causa prostatitis?
- ¿Cuáles son los factores de padecer gota?
- Qué comer durante la convalecencia de una hemorragia cerebral
- que es el alzheimer
- Principales criterios diagnósticos de las bronquiectasias
- ¿Cuáles son las formas de prevenir y tratar la menstruación irregular en las mujeres?
- Síntomas de gota de ternera
- Saco gestacional de 5x4mm cuanto dura el embarazo
- La diferencia entre espinillas y espinillas de ácaros
- Por qué frotar con jengibre puede tratar la caída del cabello
- ¿Cuánto tiempo se puede vivir con insuficiencia hepática?