Proszę, pomóżcie mi zrozumieć, czy następujące wybory, które zrobiłem, są idiomatyczne/dobre, a jeśli nie, to jak poprawić.Idiomatyczny sposób przekazywania błędów weryfikacji modelu Django do formularza
1) model walidacji nad formą walidacji
Wolę używać nowego model validation nad walidacji formularza miarę możliwości jak wydaje się bardziej suche i zasadniczy sposób tworzenia reguł dla danych. Dwa przykłady prostego modelu kalendarz wjazdu:
- "start musi być przed końcem"
- "okres musi być mniejsza niż (end-start)"
Czy idiomatyczne/dobrze umieścić je na poziomie modelu, aby nie trzeba było wkładać ich do formularzy? Jeśli ModelForm jest najlepszą odpowiedzią, to co z przypadkiem użycia wielu modeli w tej samej formie?
(edit: Nie zdawałem sobie sprawy, że wiele ModelForms rzeczywistości może być stosowany razem)
2) Przesyłanie Walidacja modelu do postaci (nie ModelForm)
(EDIT: Okazuje się, wymyślania hydraulika między weryfikacją modelu a weryfikacją formularza nie jest konieczna w mojej sytuacji, a poniższe rozwiązania pokazują, dlaczego)
Załóżmy przez chwilę, że wszelkie błędy sprawdzania poprawności modelu, które mam, mogą być bezpośrednio przekazywane i wyświetlane bezpośrednio użytkownikowi (tj. ignorowanie modelu tłumaczenia błędy sprawdzania poprawności do przyjaznych dla użytkownika błędów sprawdzania poprawności formularza).
Jest to jeden ze sposobów pracy wymyśliłem to zrobić (wszystko w jednym miejscu, bez funkcje pomocnicze):
view_with_a_form:
...
if form.is_valid():
instance = ...
...
#save() is overridden to do full_clean with optional exclusions
try: instance.save()
except ValidationError e:
nfe= e.message_dict[NON_FIELD_ERRORS]
#this is one big question mark:
instance._errors['__all__'] = ErrorList(nfe)
#this is the other big question mark. seems unnatural
if form.is_valid()
return response...
... #other code in standard format
#send the user the form as 1)new 2)form errors 3)model errors
return form
Jak zauważył w kodzie:
a) Czy to jest idiomatyczne/dobrze sposób na przeniesienie błędów modelu do formularza?
b) Czy jest to idiomatyczny/dobry sposób na sprawdzenie nowych błędów "formy"?
Uwaga: W tym przykładzie użyto błędów innych niż pola, ale myślę, że może to również dotyczyć błędów w polu.
Zmieniam wybraną odpowiedź, ponieważ aktualizacje od Stefano faktycznie przekonały mnie do adaptacji innej metody ([jedna z połączonych metod ModelForms tutaj] (http://stackoverflow.com/questions/569468/django-multiple-models -in-one-template-using-forms)) bez konieczności wymyślania instalacji hydraulicznej między walidacją modelu i walidacją formularza.(Nie wiedziałem, że można je połączyć). Odpowiedź Chrisa jest wspaniała także dla mojego najlepszego zrozumienia. – KobeJohn