| | 1 | = !NewForms = |
| | 2 | Since newforms is mostly undocumented at the moment this page summarizes some useful information. This documentation should be considered complementary to the documentation on [http://www.djangoproject.com/documentation/newforms/]. It's mostly information extracted from the [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py unit tests for newforms] at the moment. |
| | 3 | |
| | 4 | == Widgets [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L8 Unit tests] == |
| | 5 | Each Widget class corresponds to an HTML form widget. A Widget knows how to |
| | 6 | render itself, given a field name and some data. Widgets don't perform |
| | 7 | validation. |
| | 8 | |
| | 9 | === Widget types === |
| | 10 | List of widget types with their associated unit test for easy lookup. |
| | 11 | |
| | 12 | |
| | 13 | ===== !TextInput [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L15 Unit test] ===== |
| | 14 | ===== !PasswordInput [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L46 Unit test] ===== |
| | 15 | ===== !HiddenInput [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L75 Unit test] ===== |
| | 16 | ===== !FileInput [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L109 Unit test] ===== |
| | 17 | ===== !TextArea [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L133 Unit test] ===== |
| | 18 | ===== !CheckBoxInput [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L162 Unit test] ===== |
| | 19 | ===== Select [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L215 Unit test] ===== |
| | 20 | ===== !SelectMultiple [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L299 Unit test] ===== |
| | 21 | ===== !RadioSelect [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L406 Unit test] ===== |
| | 22 | ===== !CheckBoxSelectMultiple [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L536 Unit test] ===== |
| | 23 | |
| | 24 | |
| | 25 | == Fields == |
| | 26 | Each Field class does some sort of validation. Each Field has a clean() method, which either raises django.newforms.!ValidationError or returns the "clean" data -- usually a Unicode object, but, in some rare cases, a list. |
| | 27 | |
| | 28 | Each Field's __init__() takes at least these parameters: |
| | 29 | |
| | 30 | * ''required'' -- Boolean that specifies whether the field is required. True by default.[[br]] |
| | 31 | * ''widget'' -- A Widget class, or instance of a Widget class, that should be used for this Field when displaying it. Each Field has a |
| | 32 | * ''default'' -- Widget that it'll use if you don't specify this. In most cases, the default widget is !TextInput. |
| | 33 | * ''label'' -- A verbose name for this field, for use in displaying this field in a form. By default, Django will use a "pretty" version of the form field name, if the Field is part of a Form. |
| | 34 | * ''initial'' -- A value to use in this Field's initial display. This value is *not* used as a fallback if data isn't given. |
| | 35 | |
| | 36 | Other than that, the Field subclasses have class-specific options for __init__(). For example, !CharField has a max_length option. |
| | 37 | |
| | 38 | === Field types [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L644 Unit tests] === |
| | 39 | List of field types with their associated unit test for easy lookup. |
| | 40 | |
| | 41 | ===== !CharField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L669 Unit test] ===== |
| | 42 | Arguments: |
| | 43 | * ''max_length'' -- (optional) Maximum number of characters |
| | 44 | * ''min_length'' -- (optional) Minimum number of characters |
| | 45 | |
| | 46 | ===== !IntegerField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L735 Unit test] ===== |
| | 47 | Arguments: |
| | 48 | * ''max_value'' -- (optional) Maximum value |
| | 49 | * ''min_value'' -- (optional) Minimum value |
| | 50 | |
| | 51 | ===== !DateField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L858 Unit test] ===== |
| | 52 | Arguments: |
| | 53 | * ''input_formats'' -- (optional) A list of strftime() input formats. These will override all other input formats |
| | 54 | |
| | 55 | ===== !TimeField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L935 Unit test] ===== |
| | 56 | |
| | 57 | ===== !DateTimeField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L974 Unit test] ===== |
| | 58 | |
| | 59 | ===== !RegexField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1047 Unit test] ===== |
| | 60 | Arguments: |
| | 61 | * ''regex'' -- The regular expression in compiled or string form that the input should match |
| | 62 | |
| | 63 | ===== !EmailField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1138 Unit test] ===== |
| | 64 | Arguments: |
| | 65 | * ''min_length'' -- Minimum length |
| | 66 | * ''max_length'' -- Maximum length |
| | 67 | |
| | 68 | ===== URLField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1197 Unit test] ===== |
| | 69 | |
| | 70 | ===== !BooleanField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1302 Unit test] ===== |
| | 71 | Since html forms either return something like 'fieldname=on' in request.POST or request.GET, this value may not be set in form.clean_data. |
| | 72 | |
| | 73 | Arguments: |
| | 74 | * ''None'' |
| | 75 | |
| | 76 | ===== !ChoiceField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1340 Unit test] ===== |
| | 77 | Arguments: |
| | 78 | * ''choices'' -- A list of (key, value) pairs |
| | 79 | |
| | 80 | ===== !MultipleChoiceField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1382 Unit test] ===== |
| | 81 | Arguments: |
| | 82 | * ''choices'' -- A list of (key, value) pairs |
| | 83 | |
| | 84 | ===== !ComboField [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1448 Unit test] ===== |
| | 85 | !ComboField takes a list of fields that should be used to validate a value, in that order. |
| | 86 | |
| | 87 | Arguments: |
| | 88 | * ''choices'' -- A list of fields used to validate the input value |
| | 89 | clean() returns: |
| | 90 | * ''unicode object'' |
| | 91 | |
| | 92 | == Forms [http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py#L1489 Unit test] == |
| | 93 | A Form is a collection of Fields. It knows how to validate a set of data and it knows how to render itself in a couple of default ways (e.g., an HTML table). You can pass it data in __init__(), as a dictionary. |
| | 94 | |
| | 95 | |