Proszę zobaczyć poniższy kod. Zasadniczo, gdy użytkownik tworzy obiekt tej klasy, musi podać wartość value_type
. Jeśli value_type==2
(procent), to percentage_calculated_on
(co jest CheckboxSelectMultiple na stronie formularza/szablonu musi mieć zaznaczone jeden lub więcej elementów.) Walidacja modelu nie pozwala mi na sprawdzenie, jak próbuję - to w zasadzie wyrzuca wyjątek, który mówi mi, że instancja musi mieć wartość klucza podstawowego, zanim będzie można użyć relacji wiele do wielu.Ale muszę najpierw sprawdzić obiekt przed zapisaniem.Spróbowałem to sprawdzanie po stronie formularza (modelform) (przy użyciu metody czystej postaci jest), ale to samo dzieje się tam.sprawdzanie poprawności django
Jak mogę iść o osiągnięciu tego walidację?
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.")
Podałem poniżej odpowiedź Manoj Govindana jako "zaakceptowaną", ponieważ rozwiązuje problem. Chciałbym jednak, aby był on sprawdzany za pomocą sprawdzania poprawności modelu Django. Jeśli więc ktoś ma jakieś pomysły, postaraj się opublikować go tutaj. Dzięki. – chefsmart
to samo pytanie: http://stackoverflow.com/questions/7986510/django-manytomany-model-validation – user920391