Bitte beachten Sie den folgenden Code. Wenn der Benutzer ein Objekt dieser Klasse erstellt, müssen sie die value_type
angeben. Wenn value_type==2
(Prozent), dann percentage_calculated_on
(das ist ein CheckboxSelectMultiple auf der Formular/Template-Seite muss eines oder mehrere Elemente überprüft haben. Die Modellvalidierung erlaubt mir nicht zu validieren, wie ich versuche - es wirft im Grunde eine Ausnahme, die mir sagt, dass die Instanz einen Primärschlüsselwert haben muss, bevor eine Viele-zu-Viele-Beziehung verwendet werden kann.Ich muss jedoch zuerst das Objekt validieren, bevor ich es speichere.Ich habe diese Validierung auf der Formularseite (Modellform) versucht (unter Verwendung des saubere Methode des Formulars), aber das gleiche passiert auch dort.django manytomany Validierung
Wie gehe ich über diese Validierung zu erreichen?
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.")
Ich habe Manoj Govindans Antwort unten als "akzeptiert" markiert, da sie das Problem löst. Ich würde es dennoch gerne mit Djangos Modellvalidierung validieren lassen. Also, wenn jemand irgendwelche Ideen hat, bemühe dich, es hier zu posten. Vielen Dank. – chefsmart
gleiche Frage: http://stackoverflow.com/questions/7986510/django-manytomany-model-validation – user920391