>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
u'foo@example.com'
>>> f.clean(u'foo@example.com')
u'foo@example.com'
>>> f.clean('invalid email address')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid e-mail address.']
>>> f = forms.CharField()
>>> f.clean('foo')
u'foo'
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> f.clean(None)
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> f.clean(' ')
u' '
>>> f.clean(0)
u'0'
>>> f.clean(True)
u'True'
>>> f.clean(False)
u'False'
>>> f = forms.CharField(required=False)
>>> f.clean('foo')
u'foo'
>>> f.clean('')
u''
>>> f.clean(None)
u''
>>> f.clean(0)
u'0'
>>> f.clean(True)
u'True'
>>> f.clean(False)
u'False'
>>> class CommentForm(forms.Form):
... name = forms.CharField(label='Your name')
... url = forms.URLField(label='Your Web site', required=False)
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print f
<tr><th>Your name:</th><td><input type="text" name="name" /></td></tr>
<tr><th>Your Web site:</th><td><input type="text" name="url" /></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print f
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
<tr><th>Url:</th><td><input type="text" name="url" value="http://" /></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
>>> class CommentForm(forms.Form):
... name = forms.CharField()
... url = forms.URLField()
... comment = forms.CharField()
>>> default_data = {'name': 'Your name', 'url': 'http://'}
>>> f = CommentForm(default_data, auto_id=False)
>>> print f
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
<tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="text" name="url" value="http://" /></td></tr>
<tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" /></td></tr>
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> data = {'name': '', 'url': '', 'comment': 'Foo'}
>>> f = CommentForm(data)
>>> f.is_valid()
False
# The form does *not* fall back to using the initial values.
>>> f.errors
{'url': [u'This field is required.'], 'name': [u'This field is required.']}
>>> import datetime
>>> class DateForm(forms.Form):
... day = forms.DateField(initial=datetime.date.today)
>>> print DateForm()
<tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" /><td></tr>
>>> class HelpTextContactForm(forms.Form):
... subject = forms.CharField(max_length=100, help_text='100 characters max.')
... message = forms.CharField()
... sender = forms.EmailField(help_text='A valid email address, please.')
... cc_myself = forms.BooleanField(required=False)
>>> f = HelpTextContactForm(auto_id=False)
>>> print f.as_table()
<tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /><br /><span class="helptext">100 characters max.</span></td></tr>
<tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
<tr><th>Sender:</th><td><input type="text" name="sender" /><br />A valid email address, please.</td></tr>
<tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
>>> print f.as_ul()
<li>Subject: <input type="text" name="subject" maxlength="100" /> <span class="helptext">100 characters max.</span></li>
<li>Message: <input type="text" name="message" /></li>
<li>Sender: <input type="text" name="sender" /> A valid email address, please.</li>
<li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
>>> print f.as_p()
<p>Subject: <input type="text" name="subject" maxlength="100" /> <span class="helptext">100 characters max.</span></p>
<p>Message: <input type="text" name="message" /></p>
<p>Sender: <input type="text" name="sender" /> A valid email address, please.</p>
<p>Cc myself: <input type="checkbox" name="cc_myself" /></p>
>>> generic = forms.CharField()
>>> generic.clean('')
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
>>> name.clean('')
Traceback (most recent call last):
...
ValidationError: [u'Please enter your name']
Примечание
Так как все потомки Field по умолчанию имеют required=True, это условие проверки имеет большое значение. Если вам требуется включить в свою форму булево значение, которое может принимать значения True или False (т.е. отмеченный или неотмеченный чекбокс), то вы должны передать required=False в создаваемое поле BooleanField.
Имеет два необязательных аргумента для проверки:
Если они указаны, то производится соответствующая проверка длины полученной строки.
Сообщение об ошибке invalid_choice может содержать %(value)s, которое будет замещено выбранным вариантом.
Принимает один дополнительный обязательный аргумент:
Итерируемый объект (т.е. список или кортеж), содержащий ряд двухэлементных кортежей, для использования в качестве вариантов для данного поля. Этот аргумент принимает те же форматы, что и аргумент choices поля модели. Обратитесь к справочнику по полям модели для подробной информации.
Аналогично ChoiceField, но TypedChoiceField принимает два дополнительных аргумента, coerce и empty_value.
Принимает дополнительные аргументы:
Функция, которая принимает один аргумент и возвращает преобразованное значение. Примеры включают встроенные int, float, bool и другие типы. Defaults to an identity function.
Значение, используемое для представления “пустоты”. Обычно это пустая строка. None является ещё одним вариантом. Следует отметить, что это значение не будет преобразовываться функцией, определённой аргументом coerce, так что выбирайте значение соответственно.
Принимает один необязательный аргумент:
Список форматов, используемых при попытках сконвертировать строку в объект datetime.date.
Если аргумент input_formats не предоставлен, то используются следующие форматы:
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
'%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
'%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
'%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
'%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
Принимает один необязательный аргумент:
Список форматов, используемых при попытках сконвертировать строку в объект datetime.datetime.
Если аргумент input_formats не предоставлен, то используются следующие форматы:
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
'%m/%d/%y', # '10/25/06'
Сообщения об ошибках max_value и min_value могут содержать шаблон``%(limit_value)s``, который будет заполнен соответствующим значением.
Принимает четыре необязательных аргумента:
Эти аргументы управляют диапазоном значений, разрешённых для ввода в поле, и должны быть заполнены значениями decimal.Decimal.
Максимальное число разрядов (до и после десятичной точки, впередистоящие нули обрезаются) разрешённых в значении.
Максимальное число разрешённых десятичных разрядов.
Имеет два необязательных аргумента: max_length и min_length. Если аргументы указаны, то они контролируют диапазон принимаемого значения.
Имеет два необязательных аргумента: max_length и allow_empty_file. Если аргументы указаны, то первый ограничивает длину имени файла, а второй позволяет загружать даже пустые файлы.
Для получения подробностей об объекте ``UploadedFile`, см. документацию по загрузке файлов.
При использовании FileField на форме, вы должны не забыть связать данные файла с формой.
Ошибка max_length относится к длине имени файла. В сообщении об ошибке шаблон %(max)d будет заменён максимальной длиной имени файла, а %(length)d – длиной имени текущего файла.
Поле позволяет выбирать файл из определённого каталога. Оно принимает три дополнительных аргумента, требуя обязательного наличия аргумента path:
Абсолютный путь до каталога, содержимое которого вы желаете отобразить. Этот каталог должен существовать.
Если False (по умолчанию), то будет показано только содержимое каталога, указанного в path. Если True, то будет показано также и содержимое всех вложенных каталогов.
Шаблон регулярного выражения. Отображаться будут только те файлы, которые подходят под указанное регулярное выражение.
Принимает два необязательных аргумента для проверки: max_value и min_value. Они определяют диапазон значений, разрешённый для поля.
Использование ImageField требует установки Python Imaging Library.
При использовании ImageField на форме, вы должны не забыть связать данные файла с формой.
Сообщения об ошибках max_value и min_value могут содержать шаблон``%(limit_value)s``, который будет заполнен соответствующим значением.
Принимает два необязательных аргумента для проверки:
Они определяют диапазон значений, разрешённый для поля.
Поле для обработки адресов IPv4 или IPv6.
IPv6 адрес преобразуется в соответствии с RFC 4291, секция 2.2, включая использование формата IPv4, предложенного в параграфе 3 этой секции, вида ::ffff:192.0.2.0. Например, 2001:0::0:01 будет преобразован к 2001::1, а ::ffff:0a0a:0a0a к ::ffff:10.10.10.10. Все символы преобразуются в нижний регистр.
Принимает два необязательных аргумента:
Ограничивает диапазон значений указанным протоколом. Принимает значения: both (по умолчанию, т.е. “оба”), IPv4 или IPv6. Регистр букв не имеет значения.
Распаковывает IPv4 адреса вида ::ffff::192.0.2.1. Если эта опция активирована, то адрес будет преобразован в 192.0.2.1. По умолчанию опция отключена. Может использоваться только если protocol установлен в 'both'.
Сообщение об ошибке invalid_choice может содержать %(value)s, которое будет замещено выбранным вариантом.
Принимает один дополнительный обязательный аргумент choices, аналогично полю ChoiceField.
Похоже на MultipleChoiceField, за исключением того, что TypedMultipleChoiceField принимает два дополнительных аргумента: coerce и empty_value.
Сообщение об ошибке invalid_choice может содержать %(value)s, которое будет замещено выбранным вариантом.
Принимает два дополнительных аргумента, coerce и empty_value, аналогично TypedChoiceField.
Принимает один обязательный аргумент:
Регулярное выражение в виде строки или скомпилированного объекта регулярного выражения.
Также принимает аргументы max_length и min_length, которые работают аналогично CharField.
Необязательный аргумент error_message принимается в целях обратной совместимости. Предпочтительным способом указания собственного сообщения об ошибке является использование аргумента error_messages, которому назначается словарь с ключём invalid.
Это поле предназначено для представления поля модели SlugField на формах.
Принимает один необязательный аргумент:
Список форматов, используемых при попытках сконвертировать строку в объект datetime.time.
Если аргумент input_formats не предоставлен, то используются следующие форматы:
'%H:%M:%S', # '14:30:59'
'%H:%M', # '14:30'
Принимает следующие необязательные аргументы:
Аналогичны CharField.max_length и``CharField.min_length``.
Если True, то производится проверка работоспособности полученного URL. В случае недоступности ресурса (т.е., получен ответ 404), вызывается исключение ValidationError. Значение по умолчанию False.
Строка, используемая в качестве идентификатора браузера при проверке URL. По умолчанию равна значению URL_VALIDATOR_USER_AGENT.
Принимает один дополнительный обязательный аргумент:
Список полей, которые должны использоваться для проверки значения поля (в порядке их определения).
>>> f = ComboField(fields=[CharField(max_length=20), EmailField()])
>>> f.clean('test@example.com')
u'test@example.com'
>>> f.clean('longemailaddress@example.com')
Traceback (most recent call last):
...
ValidationError: [u'Ensure this value has at most 20 characters (it has 28).']
Это абстрактное поле (от него следует наследовать свои поля) объединяет логику нескольких полей. Дочерние классы не должны реализовывать метод clean(). Вместо этого, они должны предоставлять метод compress(), который принимает список проверенных значений и возвращает “сжатую” версию этих данных в виде одного значения. Например, класс SplitDateTimeField является дочерним классом этого поля, который объединяет поля даты и времени в единый объект даты-времени.
Принимает один дополнительный обязательный аргумент:
Список полей, которые объединяются в единственное поле. Каждое значение в свойстве clean проверено соответствующим полем в fields. Первое значение обрабатывается первым полем, второе – вторым и так далее. После проверки всех полей, список значений “сжимается” в одно значений.
Принимает два необязательных аргумента:
Список форматов, используемых при попытках сконвертировать строку в объект datetime.date.
Если аргумент input_date_formats не был предоставлен, то используются шаблоны аналогичные полю DateField.
Список форматов, используемых при попытках сконвертировать строку в объект datetime.time.
Если аргумент input_date_formats не был предоставлен, то используются шаблоны аналогичные полю TimeField.
Позволяет выбрать единственный объект модели. Подходит для представления внешнего ключа. Обязательный аргумент:
Объект QuerySet содержит выборку объектов модели, которые являются значениями для этого поля и которые будут использоваться для проверки полученных данных.
``ModelChoiceField``принимает один необязательный аргумент:
По умолчанию виджет <select>, используемый полем ModelChoiceField, содержит пустой вариант в начале списка. Вы можете изменить текстовую метку для этого варианта (по умолчанию это "---------") с помощью атрибута empty_label. Также вы можете исключить пустой вариант из списка поря, назначив None параметру empty_label:
# A custom empty label
field1 = forms.ModelChoiceField(queryset=..., empty_label="(Nothing)")
# No empty label
field2 = forms.ModelChoiceField(queryset=..., empty_label=None)
Следует отметить, что если ModelChoiceField является обязательным и имеет начальное значение, то пустой вариант отсутствует для такого поля, вне зависимости от значения аргумента empty_label.
При генерации текстового представления варианта используется метод __unicode__ модели. Для получения собственного представления, следует унаследовать ModelChoiceField и переопределить метод label_from_instance. Этот метод получает объект модели и должен возвратить соответствующую строку. Например:
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "My Object #%i" % obj.id
Позволяет выбрать один или несколько объектов модели. Подходит для представления отношения “многие-ко-многим”. Аналогично ModelChoiceField, вы можете использовать label_from_instance для управления текстовым представлением объекта. Параметр queryset является обязательным:
Объект QuerySet содержит выборку объектов модели, которые являются значениями для этого поля и которые будут использоваться для проверки полученных данных.
Aug 21, 2013