Django

Forms-Valid

Django - formuláře

1.  Uzpůsobení validace formulářů

Validace se spouští metodou formuláře is_valid() (případně errors, full_clean() - obvykle se nedělá)

Validovat můžeme jedotlivá pole formuláře (pole.clena()), nebo formulář jako celek (formul.clean()). Validace na úrovni formuláře umožňuje například testy, kdy několik polí souvisí navzájem. Případná chybová hláška nepatří žádnému konkrétnímu poli, takže je postoupena do atributu non_field_errors. který obvykle zobrazujeme v šabloně někde nad formlulářem.

2.  Postup a metody pro validaci:

Uvádím, zda se jedná o položku (formulářové pole), nebo o formulář (formulář jako celek).

  • metoda položky to_python() - převede surová data z formuláře do podoby správného datového typu, nebo vyhodí ValidationError, pokud se to nepovede.
  • metoda položky validate() - validace, která se nehodí pro validátor. Override jí v situacích, kdy něco nemůžeme dát do validátoru. Přijímá normalizovaná data, nevrací nic.
  • metoda položky run_validators() - spouští všechny validátory na položce. Případné výjimky sdruží do jedné ValidationError. Tuhle metodu nepřepisovat.
  • metoda položky clean() - spouští výše uvedené metody (to_python, validate, run_validators) ve správném pořadí. Při první chybě končí. Je-li vše o.k., vrátí "clean data", která jsou pak vložena do slovníku cleaned_data
  • metoda instance formuláře clean_položka(). Tomu moc nerozumím :-) Spouští veškeré clean pro danou položku formuláře, bez ohledu na to jakého typu je. Nedostává žádné parametry. Hodnotu najdeme v self.cleaned_data. Vrací cleaned data položky, ať už je měnila nebo ne. Vhodné pro vlastní úpravy override.
  • metoda formuláře clean() - tady můžeme validovat vztahy mezi více položkami formuláře (tj určená k přepsání override). Nezapomínat, že musí vrátit veškerá cleaned_data (je to úroveň formuláře). Výjimky se dávají do speciálního "pole" __all__, které je pak přístupné přes non_field_errors(). Máme-li ModelForm, pak tu jsou ještě další drobnosti k vyřešení.