Por favor, vea el código a continuación. Básicamente, cuando el usuario crea un objeto de esta clase, necesita especificar el value_type
. Si es value_type==2
(porcentaje), entonces percentage_calculated_on
(que es un CheckboxSelectMultiple en el lado de formulario/plantilla necesita tener uno o más elementos marcados. La validación del modelo no me permite validar como lo estoy intentando - básicamente arroja un excepción que me dice que la instancia necesita tener un valor de clave primaria antes de que se pueda usar una relación muchos a muchos. Pero primero necesito validar el objeto antes de guardarlo. He intentado esta validación en el lado del formulario (modelo) (utilizando el método de limpieza de la forma), pero lo mismo sucede allí también.django manytomany validación
¿Cómo hago para lograr esta validación?
INHERENT_TYPE_CHOICES = ((1, 'Payable'), (2, 'Deductible'))
VALUE_TYPE_CHOICES = ((1, 'Amount'), (2, 'Percentage'))
class Payable(models.Model):
name = models.CharField()
short_name = models.CharField()
inherent_type = models.PositiveSmallIntegerField(choices=INHERENT_TYPE_CHOICES)
value = models.DecimalField(max_digits=12,decimal_places=2)
value_type = models.PositiveSmallIntegerField(choices=VALUE_TYPE_CHOICES)
percentage_calculated_on = models.ManyToManyField('self', symmetrical=False)
def clean(self):
from django.core.exceptions import ValidationError
if self.value_type == 2 and not self.percentage_calculated_on:
raise ValidationError("If this is a percentage, please specify on what payables/deductibles this percentage should be calculated on.")
He marcado a continuación la respuesta de Manoj Govindan como "aceptada", ya que resuelve el problema. Sin embargo, me gustaría que se validara usando la validación del modelo de Django. Entonces, si alguien tiene alguna idea, haga el esfuerzo de publicarla aquí. Gracias. – chefsmart
misma pregunta: http://stackoverflow.com/questions/7986510/django-manytomany-model-validation – user920391