2009-09-24 16 views
11

Należy podnieść wyjątek w metodzie zapisu modelu. Mam nadzieję, że istnieje wyjątek, który zostanie przechwycony przez dowolne django ModelForm, które używa tego modelu, w tym formularzy administracyjnych.Podnoszenie wartości sprawdzania poprawności z metody składowania modelu django?

Próbowałem podnieść django.forms.ValidationError, ale wygląda na to, że formularze administratora nie są już dostępne. Model wykonuje zdalne wywołanie procedury przy czasie zapisu i nie jest znany do czasu tego wywołania, jeśli dane wejściowe są poprawne.

Dzięki, Pete

Odpowiedz

8

Obecnie nie sposób przeprowadzania walidacji metod oszczędzania w modelu. Jest to jednak opracowywane jako oddzielna gałąź sprawdzania poprawności modelu i powinno zostać scalone w trunk w ciągu najbliższych kilku miesięcy.

Tymczasem należy wykonać sprawdzanie poprawności na poziomie formularza. Tworzenie podklasy ModelForm jest dość proste dzięki metodzie clean(), która wykonuje zdalne wywołanie i odpowiednio podnosi wyjątek, i używa go zarówno w administratorze, jak i jako podstawa dla innych formularzy.

+3

Django ostatnio mnie nurtuje. Poszedłem z takim podejściem, ale nie jestem zadowolony. Kod, który modyfikuje model, nie należy do czystej metody. – slypete

+0

Po prostu meldujesz się, czy ta gałąź, o której mówiłeś, została jeszcze scalona? – rennat

+5

Jest to część Django 1.2: http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects – Tom

10

Ponieważ Django 1.2, to co robiłem:

class MyModel(models.Model): 

    <...model fields...> 

    def clean(self, *args, **kwargs): 
     if <some constraint not met>: 
      raise ValidationError('You have not met a constraint!') 
     super(MyModel, self).clean(*args, **kwargs) 

    def full_clean(self, *args, **kwargs): 
     return self.clean(*args, **kwargs) 

    def save(self, *args, **kwargs): 
     self.full_clean() 
     super(MyModel, self).save(*args, **kwargs) 

Ma to tę zaletę pracy zarówno wewnątrz jak i na zewnątrz administratora.

Powiązane problemy