Forms-Fields
Django - formuláře
Obsah stránky (hide)
1. Formulářová pole
Toto je seznam atributů a metod, které se vztahují ke konkrétní položce formuláře.
1.1 Validace
- clean
- Metoda, která spouští validaci konkrétní položky. Jako argument bere "surovou hodnotu" a vrací buď normalizovaná data, nebo výjimku ValidationError.
1.2 Argumenty formulářových položek (pol = Form.CharField(argument=hodnota)
Nastavujeme, jen když nevyhovuje výchozí stav. Tedy validace proběhne i bez zadání "validators". Lokalizový vstup funguje i bez "localize" obvykle dobře.
- required
- Boolean, zda položka smí být prázdná, nebo je pole povinné
- label
- Lidská podoba textu návěští pro položku. Jinak je label generován z názvu položky.
- initial
- Hodnota, která se vloží jako výchozí v unbound formuláři. Konstanta nebo callable.
- widget
- Chceme-li jiný, než výchozí widget na html stránce.
- help_text
- Umoží přidat nápovědu k položce. Zobrazí se napravo od formulářového pole v html výstupu.
- error_messages
- Nahradí výchozí chybové hlášky našimi. Je to slovník, kde klíč je název chyby a hodnota je text hlášky. Př: error_messages={'required': 'Please enter your name'}
- validators
- Seznam validačních funkcí.
- localize
- Umožní upravit lokalizaci vstupu. Výchozí ale většinou vyhovuje (např. datum můžeme v Česku zadat ve formátu d.m.rrrr a Django to pochopí).
1.3 Vestavěné typy položek (field classes)
Kromě zmíněných paramterů můžeme samozřejmě použít i obecné z předchozí části.
Textové typy | popis | parametry | widget | err klíče |
CharField | textový řetězec | max_length, min_length | TextInput | required, max_length, min_length |
EmailField | emailová adresa | max_length. min_length | TextInput | required, invalid |
RegexField | textový řetězec | regex - buď jako text, nebo zkompilovaný regex objekt | TextInput | required, invalid |
SlugField | textový řetězec z písmen, číslic, podtržítek a pomlček | TextInput | required, invalid | |
Číselné typy | popis | parametry | widget | err klíče |
DecimalField | desetinné číslo decimal | max_value, min_value, max_digits, decimal_places | TextInput | required, invalid, max_value, min_value, max_digits, max_decimal_places, max_whole_digits |
FloatField | destinné číslo real | max_value, min_value | TextInput | required, invalid, max_value, min_value |
IntegerField | celé číslo | max_value, min_value | TextInput | required, invalid, max_value, min_value |
Volby z možností (choice) | popis | parametry | widget | err klíče |
ChoiceField | výběr z daných možností | choices - list, nebo tuple obsahující dvoupložková tuple (value, text do selectu) | Select | required, invalid_choice |
MultipleChoiceField | jako Choice, ale můžeš vybrat víc možností; vrací seznam | choices | SelectMutliple | required, invalid_choice, invalid_list |
TypedChoiceField | dtto Choice plus vynutí vrácený typ | choices, coerce, empty_value | Select | required, invalid_choice |
TypedMultipleChoiceField | kombinace výše uvedeného :-) | |||
Logický typ | popis | parametry | widget | err klíče |
BooleanField | jasný, ale podivná poznámka v dokumentaci ohledně required | CheckboxInput | required | |
NullBooleanField | boolean + nic možnost jako Select | NullBooleanSelect | nevaliduje se | |
Datum, čas | popis | parametry | widget | err klíče |
DateField | zadání data | input_formats jako seznam | DateInput | required, invalid |
TimeField | zadání času | input_formats | TextInput | required, invalid |
DateTimeField | zadání data a času | input_formats | DateTimeInput | required, invalid |
SplitDateTimeField | Datum a čas je možné zadat ve dvou oddělených polích. Vrací jeden datetime.datetime objekt. | input_date_formats, input_time_formats | SplitDateTimeWidget | required, invalid, invalid_date, invalid_time |
Soubory | popis | parametry | widget | err klíče |
FileField | soubor k nahrání | ClearableFileInput | required, invalid, missing, empty, max_length | |
ImageField | jako File, ale musí být to obrázek | ClearableFileInput | required, invalid, missing, empty, invalid_image | |
FilePathField | generuje select z jmen souborů v daném adresáři | path, recursive, match, allow_files, allow_folders | Select | required, invalid_choice |
IP, URL | popis | parametry | widget | err klíče |
IPAddressField | vstup pro IPv4 adresu | TextInput | required, invalid | |
GenericIPAddressField | vstup pro IPv4 i IPv6 adresu | protocol, unpack_ipv4 | TextInput | required, invalid |
URLField | vstup pro validní URL | max_length, min_length | TextInput | required, invalid |
Komplexnější typy | popis | parametry | widget | err klíče |
ComboField | fields - seznam polí, která budou použita jako validátory | TextInput | required, invalid | |
MultiValueField | Agreguje logiku více polí generujících jednu hodnotu | fields, widget, compress | TextInput | required, invalid |
Obsluha relací | popis | parametry | widget | err klíče |
ModelChoiceField | Generuje Select z QuerySetu. Užití u cizích klíčů | queryset, empty_label | Select | required, invalid_choice |
ModelMultipleChoiceField | dtto ModelChoiceField s možností vybrat víc možností. Užití u many-to-many. | qureyset | SelectMultiple | required, list, invalid_choice, invalid_pk_value |
Poznámka k ModelChoiceField a ModelMultipleChoiceField:
Text do Selectu je brán z metody __unicode__ nadřízeného modelu. Pokud to nevyhovuje, můžeme si udělat vlastní class a přetížit metodu label_from_instance
class MyModelChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "My Object #%i" % obj.id
1.4 Vlastní upravená formulářová pole
Vytvořit podtřídu django.forms.Field. Musí implementovat metodu clean() a metoda __init__ musí přijímat obecné argumenty pole: required, label, initial, widget, help_text.