2008-10-09 15 views
80

Po zatwierdzeniu wartości wejściowych przez użytkownika przekazuję je do oddzielnego (zewnętrznego) procesu w celu dalszego przetwarzania. Ten zewnętrzny proces może potencjalnie znaleźć dalsze błędy w wartościach.Wprowadzić błędy do już zatwierdzonej formy?

Czy istnieje sposób wprowadzenia tych błędów do już zatwierdzonej formy, aby można je było wyświetlić za pomocą zwykłych metod wyświetlania błędów formularza (lub czy istnieją lepsze alternatywne metody)?

Jedna z sugestii polegała na uwzględnieniu przetwarzania zewnętrznego w walidacji formularza, co nie jest idealne, ponieważ proces zewnętrzny ma znacznie więcej zalet niż tylko sprawdzanie poprawności.

Odpowiedz

84

Form._errors może być traktowany jak standardowy słownika. Jest uważany za dobrą formę użyć klasy ErrorList oraz dołączyć błędów do istniejącej listy:

from django.forms.util import ErrorList 
errors = form._errors.setdefault("myfield", ErrorList()) 
errors.append(u"My error here") 

A jeśli chcesz dodać błędy non-polowych, należy django.forms.forms.NON_FIELD_ERRORS (domyślnie do "__all__") zamiast "myfield".

+0

Aby dopasować zawartość Django robiąc, powinieneś wstawić obiekty ErrorList. –

+1

To wydaje się trochę nieprzyjemne, ponieważ nazwa "_errors" sugeruje, że powinna być wewnętrzna w klasie formularza. Czy to standardowy sposób na zrobienie tego w Django? Jestem w podobnej sytuacji jak OP: mam formularz, w którym użytkownicy podają nową nazwę, która musi być unikalna w bazie danych. Jeśli istnieje kolizja, chciałbym wysłać formularz z błędem, ale nie będę wiedział, dopóki nie spróbuję wstawić bazy danych. (Teoretycznie sprawdzarka może sprawdzić bazę danych, ale to pachnie i jest podatna na wyścig). – Weeble

+1

@scompt: dzięki, naprawione. @Weeble: '_errors' jest częścią publicznego interfejsu API, pomimo swojej nazwy; zobacz odpowiedź insin na link do dokumentu. –

14
+5

I najwyraźniej w poście wersji 1.6 rozwoju, są one dodanie 'add_error' funkcję: https://docs.djangoproject.com/en/dev/ref/forms/api/#django .forms.Form.add_error – brianmearns

+0

A teraz Django 1.7 ma oficjalną funkcję add_error: https://docs.djangoproject.com/en/1.7/ref/forms/api/#django.forms.Form.add_error –