2012-09-26 7 views
10

Chcę zdefiniować własną procedurę sprawdzania poprawności dla określonego pola modelu Django. Chcę, aby komunikat o błędzie był wyświetlany w formularzu administratora, ale chcę, aby ta sama walidacja miała miejsce, jeśli encja jest zapisana przez własny kod Pythona. Czy można to zrobić bez naruszania zasady DRY?Sprawdzanie poprawności pola Django w modelu i administratora?

Odpowiedz

8

Jeśli chcesz sprawdzić poprawność pojedynczego pola, możesz write a validator dodać go do swojego pola modelu.

Walidator będzie uruchamiany dla pola, gdy zostanie wywołana metoda modelu full_clean. Będzie on uruchamiany za każdym razem, gdy sprawdzana jest formuła modelu (w tym w administratorze Django), ale nie uruchomi się automatycznie po zapisaniu instancji modelu - należy ręcznie wywołać full_clean w kodzie Pythona.

m = MyModel(x=20) 
m.full_clean() # may raise ValidationError 
m.save() 

Jeśli chciał wymusić walidator do uruchomienia gdy model jest zapisywany, a następnie można zastąpić metodę zapisywania i nazywają full_clean tam. Zwróć uwagę, że spowodowałoby to dwukrotne uruchomienie sprawdzania poprawności podczas używania formularzy modelu i administratora django.