Si prega di consultare il codice qui sotto. Fondamentalmente, quando l'utente crea un oggetto di questa classe, è necessario specificare lo value_type
. Se value_type==2
(percentuale), quindi percentage_calculated_on
(che è un CheckboxSelectMultiple sul lato modulo/modello deve avere uno o più elementi controllati. La convalida del modello non mi consente di convalidare come sto provando, fondamentalmente genera un eccezione che mi dice che l'istanza deve avere un valore di chiave primaria prima di poter usare una relazione molti-a-molti.Ma devo prima convalidare l'oggetto prima di salvarlo.Ho provato questa convalida sul lato form (modelform) (utilizzando il metodo pulito del form), ma la stessa cosa accade anche lì.django manytomany validation
Come posso fare per il raggiungimento di questo convalida?
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.")
Ho segnato la risposta di Manoj Govindan come "accettata" in quanto risolve il problema. Tuttavia, mi piacerebbe averlo convalidato usando la convalida del modello di Django. Quindi se qualcuno ha qualche idea, fai lo sforzo di postarlo qui. Grazie. – chefsmart
stessa domanda: http://stackoverflow.com/questions/7986510/django-manytomany-model-validation – user920391