Поля форм
-
class Field(**kwargs)[source]
При создании класса Form, важнейшей частью является определение полей формы. Каждое поле имеет собственную логику валидации и некоторые другие особенности.
-
Field.clean(value)[source]
Хотя основное применение классов Field заключается в классах Form, вы также можете их инстанцировать и использовать напрямую, чтобы лучше понять их работу. Каждый экземпляр Field имеет метод clean(), который принимает один аргумент и либо вызывает исключение django.forms.ValidationError, либо возвращает очищенное значение:
>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
'foo@example.com'
>>> f.clean('invalid email address')
Traceback (most recent call last):
...
ValidationError: ['Enter a valid email address.']
Основные аргументы поля
Каждый конструктор класса Field принимает как минимум эти аргументы. Некоторые классы Field принимают дополнительные аргументы, специфичные для поля, но следующие должны всегда приниматься:
Требовательность
-
Field.required
По умолчанию каждый класс Field предполагает, что значение требуется, поэтому если вы передадите пустое значение — либо None , либо пустую строку ("" ) — тогда clean() вызовет исключение ValidationError.
>>> from django import forms
>>> f = forms.CharField()
>>> f.clean('foo')
'foo'
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
>>> f.clean(None)
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
>>> f.clean(' ')
' '
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'
Чтобы указать, что поле не является обязательным, передайте required=False в конструктор Field.
>>> f = forms.CharField(required=False)
>>> f.clean('foo')
'foo'
>>> f.clean('')
''
>>> f.clean(None)
''
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'
Если у Field есть required=False и вы передаете clean() пустое значение, тогда clean() вернёт нормализованное пустое значение вместо вызова ValidationError. Для CharField, это будет пустая строка. Для других классов Field, это может быть None. (Это зависит от поля.)
У виджетов обязательных полей формы есть атрибут required HTML. Установите атрибут Form.use_required_attribute в значение False, чтобы отключить его. Атрибут required не включён в формы formset, так как проверка браузера может быть некорректной при добавлении и удалении formset.
Метка
-
Field.label
Аргумент label позволяет указать «человекопонятную» метку для этого поля. Это используется при отображении поля в Field, которое, в свою очередь, отображается в Form.
Как объяснялось выше в разделе «Вывод форм в HTML», по умолчанию метка для поля Field генерируется из имени поля путём преобразования всех символов подчеркивания в пробелы и прописной первой буквы. Укажите label, если такое поведение по умолчанию не приводит к удовлетворительной метке.
Вот полный пример Form, в котором реализована label для двух полей. Мы указали auto_id=False для упрощения вывода:
>>> from django import forms >>> class CommentForm(forms.Form): ... name = forms.CharField(label='Your name') ... url = forms.URLField(label='Your website', required=False) ... comment = forms.CharField() >>> f = CommentForm(auto_id=False) >>> print(f) <tr><th>Your name:</th><td><input type="text" name="name" required /></td></tr> <tr><th>Your website:</th><td><input type="url" name="url" /></td></tr> <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr>
Приставка к метке
-
Field.label_suffix
Аргумент label_suffix позволяет переопределить атрибут label_suffix формы на уровне поля:
>>> class ContactForm(forms.Form): ... age = forms.IntegerField() ... nationality = forms.CharField() ... captcha_answer = forms.IntegerField(label='2 + 2', label_suffix=' =') >>> f = ContactForm(label_suffix='?') >>> print(f.as_p()) <p><label for="id_age">Age?</label> <input id="id_age" name="age" type="number" required /></p> <p><label for="id_nationality">Nationality?</label> <input id="id_nationality" name="nationality" type="text" required /></p> <p><label for="id_captcha_answer">2 + 2 =</label> <input id="id_captcha_answer" name="captcha_answer" type="number" required /></p>
Начальное значение
-
Field.initial
Аргумент initial позволяет указать начальное значение для отображения этого Field в свободной Form.
Для указания динамических начальных данных см. параметр Form.initial.
Это необходимо в случаях, когда вам нужно отобразить «пустую» форму, в которой поле инициализировано определённым значением. Например:
>>> from django import forms >>> 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" required /></td></tr> <tr><th>Url:</th><td><input type="url" name="url" value="http://" required /></td></tr> <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr>
Вы, возможно, думаете, почему не передать словарь начальных значений в качестве данных при отображении формы? Дело в том, что при этом будет запущена валидация, и в HTML-выводе появятся все ошибки валидации:
>>> 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" required /></td></tr>
<tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="url" name="url" value="http://" required /></td></tr>
<tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" required /></td></tr>
Поэтому значения initial отображаются только для свободных форм. Для связанных форм в HTML-выводе будут использованы связанные данные.
Обратите также внимание, что значения initial не используются в качестве «запасных» данных при валидации, если значение определённого поля не указано. Значения initial предназначены только для первоначального отображения формы:
>>> 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': ['This field is required.'], 'name': ['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" required /><td></tr>
Вызываемый объект будет вычислен только при отображении свободной формы, а не при её определении.
Виджет
-
Field.widget
Аргумент widget позволяет указать класс Widget для отображения этого Field. Дополнительная информация представлена в разделе Виджеты.
Текст справки
-
Field.help_text
Аргумент help_text позволяет указать описательный текст для этого Field. Если вы предоставите help_text, он будет отображаться рядом с Field при отображении Field одним из удобных методов Form (например, as_ul()).
Как и в атрибуте help_text поля модели, это значение не экранируется в HTML при автоматическом генерации форм.
Вот полный пример Form, в котором реализована help_text для двух полей. Мы указали auto_id=False для упрощения вывода:
>>> from django import forms >>> 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" required /><br /><span class="helptext">100 characters max.</span></td></tr> <tr><th>Message:</th><td><input type="text" name="message" required /></td></tr> <tr><th>Sender:</th><td><input type="email" name="sender" required /><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" required /> <span class="helptext">100 characters max.</span></li> <li>Message: <input type="text" name="message" required /></li> <li>Sender: <input type="email" name="sender" required /> 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" required /> <span class="helptext">100 characters max.</span></p> <p>Message: <input type="text" name="message" required /></p> <p>Sender: <input type="email" name="sender" required /> A valid email address, please.</p> <p>Cc myself: <input type="checkbox" name="cc_myself" /></p>
Сообщения об ошибках
-
Field.error_messages
Аргумент error_messages позволяет переопределить стандартные сообщения об ошибках, которые будет выводить поле. Передайте словарь, где ключи соответствуют сообщениям об ошибках, которые вы хотите переопределить. Например, вот стандартное сообщение об ошибке:
>>> from django import forms
>>> generic = forms.CharField()
>>> generic.clean('')
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
И вот настраиваемое сообщение об ошибке:
>>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
>>> name.clean('')
Traceback (most recent call last):
...
ValidationError: ['Please enter your name']
В разделе встроенных классах полей ниже каждый Field определяет используемые ключи сообщений об ошибках.
Валидаторы
-
Field.validators
Аргумент validators позволяет указать список функций валидации для этого поля.
Дополнительная информация приведена в документации по валидаторам.
Локализация
-
Field.localize
Аргумент localize включает локализованный ввод данных формы, а также вывод.
Дополнительная информация о локализации формата содержится в документации по форматированию локализации.
Отключено
-
Field.disabled
Булевый аргумент disabled, установленный в True, отключает поле формы с помощью атрибута disabled HTML, чтобы оно не редактировалось пользователями. Даже если пользователь пытается изменить значение поля, отправленное на сервер, оно будет проигнорировано в пользу значения из начальных данных формы.
Проверка изменений данных поля
Проверка изменений
-
Field.has_changed()[source]
Метод has_changed() используется для определения, изменилось ли значение поля с момента начального значения. Возвращает True или False.
Дополнительная информация содержится в документации Form.has_changed().
Встроенные классы Field
Библиотека forms поставляется с набором классов Field для типичных задач валидации. В этом разделе описаны каждый встроенный виджет.
Для каждого поля мы опишем виджет по умолчанию, если вы не укажете widget. Мы также укажем значение, возвращаемое при вводе пустого значения (см. раздел required выше, чтобы понять, что это значит).
Поле boolean
-
class BooleanField(**kwargs)[source] -
- Виджет по умолчанию:
CheckboxInput - Пустое значение:
False - Нормализация: значение Python
TrueилиFalse. - Проверка: значение должно быть
True, если полеrequired=True. - Ключи сообщений об ошибках:
required
Примечание
Поскольку все подклассы
Fieldимеютrequired=Trueпо умолчанию, здесь важен критерий валидации. Если вы хотите включить в форму булево значение, которое может бытьTrueилиFalse(например, отмеченная или не отмеченная галочка), вы должны помнить о передачеrequired=Falseпри созданииBooleanField. - Виджет по умолчанию:
Поле char
-
class CharField(**kwargs)[source] -
- Значение по умолчанию виджета:
TextInput - Пустое значение: то, что вы задали как
empty_value. - Нормализуется в: Строку.
- Проверяет
max_lengthилиmin_length, если они предоставлены. В противном случае все входные данные валидны. - Ключи сообщений об ошибках:
required,max_length,min_length
Имеет три необязательных аргумента для валидации:
-
max_length
-
min_length
Если эти аргументы предоставлены, они гарантируют, что строка имеет не более или не менее указанной длины.
-
strip -
Если
True(по умолчанию), значение будет очищено от начальных и конечных пробелов.
-
empty_value -
Новое в Django 1.11.
Значение, используемое для представления «пустого». По умолчанию — пустая строка.
- Значение по умолчанию виджета:
ChoiceField
-
class ChoiceField(**kwargs)[source] -
- Значение по умолчанию виджета:
Select - Пустое значение:
''(пустая строка) - Нормализуется в: Строку.
- Проверяет, что заданное значение существует в списке вариантов.
- Ключи сообщений об ошибках:
required,invalid_choice
Сообщение об ошибке
invalid_choiceможет содержать%(value)s, которое будет заменено выбранным вариантом.Принимает один дополнительный аргумент:
-
choices -
Итерируемый объект (например, список или кортеж) из 2-х кортежей, используемых в качестве вариантов для этого поля, или вызываемый объект, возвращающий такой итерируемый объект. Этот аргумент принимает те же форматы, что и аргумент
choicesдля поля модели. См. документацию по полям модели по вариантам для получения более подробной информации. Если аргументом является вызываемый объект, он вычисляется каждый раз, когда поле формы инициализируется. По умолчанию — пустой список.
- Значение по умолчанию виджета:
TypedChoiceField
-
class TypedChoiceField(**kwargs)[source] -
Подобно
ChoiceField, за исключением того, чтоTypedChoiceFieldпринимает два дополнительных аргумента,coerceиempty_value.- Значение по умолчанию виджета:
Select - Пустое значение: то, что вы задали как
empty_value. - Нормализуется в: значение типа, указанного аргументом
coerce. - Проверяет, что заданное значение существует в списке вариантов и может быть приведено.
- Ключи сообщений об ошибках:
required,invalid_choice
Принимает дополнительные аргументы:
-
coerce -
Функция, которая принимает одно значение и возвращает преобразованное значение. Примеры включают встроенные
int,float,boolи другие типы. По умолчанию — функция идентичности. Обратите внимание, что приведение происходит после валидации ввода, поэтому возможно привести к значению, отсутствующему вchoices.
-
empty_value -
Значение, используемое для представления «пустого». По умолчанию — пустая строка;
None— еще один распространённый выбор. Обратите внимание, что это значение не будет преобразовано функцией, заданной в аргументеcoerce, поэтому выбирайте его соответствующим образом.
- Значение по умолчанию виджета:
DateField
-
class DateField(**kwargs)[source] -
- Значение по умолчанию виджета:
DateInput - Пустое значение:
None - Нормализуется в: Объект Python
datetime.date. - Проверяет, что заданное значение является
datetime.date,datetime.datetimeили строкой, отформатированной в определённом формате даты. - Ключи сообщений об ошибках:
required,invalid
Принимает один необязательный аргумент:
-
input_formats -
Список форматов, используемых для попытки преобразования строки в допустимый объект
datetime.date.
Если аргумент
input_formatsне предоставлен, форматы ввода по умолчанию:['%Y-%m-%d', # '2006-10-25' '%m/%d/%Y', # '10/25/2006' '%m/%d/%y'] # '10/25/06'
Кроме того, если вы укажете
USE_L10N=Falseв своих настройках, следующие значения также будут включены в форматы ввода по умолчанию:['%b %d %Y', # 'Oct 25 2006' '%b %d, %Y', # 'Oct 25, 2006' '%d %b %Y', # '25 Oct 2006' '%d %b, %Y', # '25 Oct, 2006' '%B %d %Y', # 'October 25 2006' '%B %d, %Y', # 'October 25, 2006' '%d %B %Y', # '25 October 2006' '%d %B, %Y'] # '25 October, 2006'
См. также локализация формата.
- Значение по умолчанию виджета:
DateTimeField
-
class DateTimeField(**kwargs)[source] -
- Значение по умолчанию виджета:
DateTimeInput - Пустое значение:
None - Нормализуется в: Объект Python
datetime.datetime. - Проверяет, что заданное значение является
datetime.datetime,datetime.dateили строкой, отформатированной в определённом формате даты и времени. - Ключи сообщений об ошибках:
required,invalid
Принимает один необязательный аргумент:
-
input_formats -
Список форматов, используемых для попытки преобразования строки в допустимый объект
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'
См. также локализация формата.
- Значение по умолчанию виджета:
DecimalField
-
class DecimalField(**kwargs)[source] -
- Значение по умолчанию виджета:
NumberInput, когдаField.localizeравноFalse, иначеTextInput. - Пустое значение:
None - Нормализуется в: Объект Python
decimal. - Проверяет, что заданное значение является десятичным. Начальные и конечные пробелы игнорируются.
- Ключи сообщений об ошибках:
required,invalid,max_value,min_value,max_digits,max_decimal_places,max_whole_digits
Сообщения об ошибках
max_valueиmin_valueмогут содержать%(limit_value)s, которое будет заменено соответствующим пределом. Аналогично, сообщения об ошибкахmax_digits,max_decimal_placesиmax_whole_digitsмогут содержать%(max)s.Принимает четыре необязательных аргумента:
-
max_value
-
min_value -
Они управляют диапазоном допустимых значений в поле и должны быть заданы как значения
decimal.Decimal.
-
max_digits -
Максимальное количество цифр (перед и после десятичной точки, без лидирующих нулей) допустимых в значении.
-
decimal_places -
Максимальное количество десятичных знаков.
- Значение по умолчанию виджета:
DurationField
-
class DurationField(**kwargs)[source] -
- Значение по умолчанию виджета:
TextInput - Пустое значение:
None - Нормализуется до: Python
timedelta. - Проверяет, что заданное значение — строка, которую можно преобразовать в
timedelta. - Ключи сообщений об ошибках:
required,invalid.
Принимает любой формат, понимаемый
parse_duration(). - Значение по умолчанию виджета:
EmailField
-
class EmailField(**kwargs)[source] -
- Значение по умолчанию виджета:
EmailInput - Пустое значение:
''(пустая строка) - Нормализуется до: Строка.
- Проверяет, что заданное значение является корректным адресом электронной почты, используя умеренно сложную регулярную выражение.
- Ключи сообщений об ошибках:
required,invalid
Имеет два необязательных аргумента для валидации,
max_lengthиmin_length. Если они указаны, эти аргументы гарантируют, что длина строки не превышает или не меньше указанной длины. - Значение по умолчанию виджета:
FileField
-
class FileField(**kwargs)[source] -
- Значение по умолчанию виджета:
ClearableFileInput - Пустое значение:
None - Нормализуется до: Объекта
UploadedFile, который объединяет содержимое файла и имя файла в один объект. - Может проверять, что непустые данные файла привязаны к форме.
- Ключи сообщений об ошибках:
required,invalid,missing,empty,max_length
Имеет два необязательных аргумента для валидации,
max_lengthиallow_empty_file. Если они предоставлены, эти аргументы гарантируют, что имя файла не превышает заданную длину и что проверка будет успешной даже если содержимое файла пустое.Чтобы узнать больше об объекте
UploadedFile, обратитесь к документации по загрузке файлов.При использовании поля
FileFieldв форме необходимо также помнить о привязке данных загруженных файлов к форме.Ошибка
max_lengthотносится к длине имени файла. В сообщении об ошибке для этого ключа%(max)dбудет заменено максимальной длиной имени файла, а%(length)d— текущей длиной имени файла. - Значение по умолчанию виджета:
FilePathField
-
class FilePathField(**kwargs)[source] -
- Значение по умолчанию виджета:
Select - Пустое значение:
None - Нормализуется до: Строки.
- Проверяет, что выбранный элемент существует в списке вариантов.
- Ключи сообщений об ошибках:
required,invalid_choice
Поле позволяет выбирать файлы внутри определенного каталога. Оно принимает пять дополнительных аргументов; только
pathявляется обязательным:-
path -
Абсолютный путь к каталогу, содержимое которого вы хотите отобразить в списке. Этот каталог должен существовать.
-
recursive -
Если
False(значение по умолчанию), то только непосредственное содержимоеpathбудет предложено в качестве вариантов. ЕслиTrue, каталог будет рекурсивно пройден, и все потомки будут перечислены в качестве вариантов.
-
match -
Шаблон регулярного выражения; только файлы с именами, соответствующими этому выражению, будут разрешены в качестве вариантов.
-
allow_files -
Необязательно. Либо
TrueилиFalse. Значение по умолчаниюTrue. Указывает, следует ли включать файлы в указанном расположении. Либо это, либоallow_foldersдолжно бытьTrue.
-
allow_folders -
Необязательно. Либо
TrueилиFalse. Значение по умолчаниюFalse. Указывает, следует ли включать каталоги в указанном расположении. Либо это, либоallow_filesдолжно бытьTrue.
- Значение по умолчанию виджета:
FloatField
-
class FloatField(**kwargs)[source] -
- Значение по умолчанию виджета:
NumberInput, когдаField.localizeравноFalse, иначеTextInput. - Пустое значение:
None - Нормализуется до: Python float.
- Проверяет, что заданное значение — число с плавающей точкой. Разрешены ведущие и хвостовые пробелы, как в функции Python
float(). - Ключи сообщений об ошибках:
required,invalid,max_value,min_value
Принимает два необязательных аргумента для валидации,
max_valueиmin_value. Они управляют диапазоном допустимых значений в поле. - Значение по умолчанию виджета:
ImageField
-
class ImageField(**kwargs)[source] -
- Значение по умолчанию виджета:
ClearableFileInput - Пустое значение:
None - Нормализуется до: Объекта
UploadedFile, который объединяет содержимое файла и имя файла в один объект. - Проверяет, что данные файла привязаны к форме, и что файл имеет формат изображения, поддерживаемый Pillow.
- Ключи сообщений об ошибках:
required,invalid,missing,empty,invalid_image
Использование поля
ImageFieldтребует установки библиотеки Pillow с поддержкой используемых форматов изображений. Если при загрузке изображения возникает ошибкаcorrupt image, это обычно означает, что Pillow не поддерживает указанный формат. Для исправления этой проблемы установите соответствующую библиотеку и переустановите Pillow.При использовании поля
ImageFieldв форме необходимо также помнить о привязке данных загруженных файлов к форме.После очистки и валидации поля объект
UploadedFileбудет иметь дополнительный атрибутimage, содержащий экземпляр Pillow Image, используемый для проверки, является ли файл корректным изображением. Также,UploadedFile.content_typeбудет обновлен с типом содержимого изображения, если Pillow может его определить, в противном случае он будет установлен вNone. - Значение по умолчанию виджета:
IntegerField
-
class IntegerField(**kwargs)[source] -
- Значение по умолчанию виджета:
NumberInput, когдаField.localizeравноFalse, иначеTextInput. - Пустое значение:
None - Нормализуется до: Python целого числа.
- Проверяет, что заданное значение — целое число. Разрешены ведущие и хвостовые пробелы, как в функции Python
int(). - Ключи сообщений об ошибках:
required,invalid,max_value,min_value
Сообщения об ошибках
max_valueиmin_valueмогут содержать%(limit_value)s, которое будет заменено соответствующим пределом.Принимает два необязательных аргумента для валидации:
-
max_value
-
min_value
Они управляют диапазоном допустимых значений в поле.
- Значение по умолчанию виджета:
GenericIPAddressField
-
class GenericIPAddressField(**kwargs)[source] -
Поле, содержащее IP-адрес версии 4 или 6.
- По умолчанию виджет:
TextInput - Пустое значение:
''(пустая строка) - Нормализуется до: Строки. IPv6-адреса нормализуются, как описано ниже.
- Проверяет, что заданное значение является валидным IP-адресом.
- Ключи сообщений об ошибках:
required,invalid
Нормализация IPv6-адресов следует RFC 4291#section-2.2 раздел 2.2, включая использование формата IPv4, предложенного в пункте 3 этого раздела, например
::ffff:192.0.2.0. Например,2001:0::0:01будет нормализован до2001::1, а::ffff:0a0a:0a0aдо::ffff:10.10.10.10. Все символы преобразуются в нижний регистр.Принимает два необязательных аргумента:
-
protocol -
Ограничивает допустимые входные данные указанным протоколом. Допустимые значения:
both(по умолчанию),IPv4илиIPv6. Сопоставление регистронезависимое.
-
unpack_ipv4 -
Распаковывает адреса IPv4, отображенные как
::ffff:192.0.2.1. Если этот параметр включён, этот адрес будет распакован до192.0.2.1. По умолчанию выключено. Может быть использовано только приprotocolустановлено в'both'.
- По умолчанию виджет:
MultipleChoiceField
-
class MultipleChoiceField(**kwargs)[source] -
- По умолчанию виджет:
SelectMultiple - Пустое значение:
[](пустой список) - Нормализуется до: Список строк.
- Проверяет, что каждое значение в заданном списке значений существует в списке вариантов.
- Ключи сообщений об ошибках:
required,invalid_choice,invalid_list
Сообщение об ошибке
invalid_choiceможет содержать%(value)s, которое будет заменено выбранным вариантом.Принимает один дополнительный обязательный аргумент,
choices, как и дляChoiceField. - По умолчанию виджет:
TypedMultipleChoiceField
-
class TypedMultipleChoiceField(**kwargs)[source] -
Точно так же, как
MultipleChoiceField, за исключением того, чтоTypedMultipleChoiceFieldпринимает два дополнительных аргумента,coerceиempty_value.- По умолчанию виджет:
SelectMultiple - Пустое значение: то, что вы задали как
empty_value - Нормализуется до: Список значений типа, заданного аргументом
coerce. - Проверяет, что заданные значения существуют в списке вариантов и могут быть преобразованы.
- Ключи сообщений об ошибках:
required,invalid_choice
Сообщение об ошибке
invalid_choiceможет содержать%(value)s, которое будет заменено выбранным вариантом.Принимает два дополнительных аргумента,
coerceиempty_value, как иTypedChoiceField. - По умолчанию виджет:
NullBooleanField
-
class NullBooleanField(**kwargs)[source] -
- По умолчанию виджет:
NullBooleanSelect - Пустое значение:
None - Нормализуется до: Значение Python
True,FalseилиNone. - Не выполняет проверки (т.е., никогда не вызывает
ValidationError).
- По умолчанию виджет:
RegexField
-
class RegexField(**kwargs)[source] -
- По умолчанию виджет:
TextInput - Пустое значение:
''(пустая строка) - Нормализуется до: Строка.
- Проверяет, что заданное значение соответствует определённому регулярному выражению.
- Ключи сообщений об ошибках:
required,invalid
Принимает один обязательный аргумент:
-
regex -
Регулярное выражение, заданное либо строкой, либо объектом скомпилированного регулярного выражения.
Также принимает
max_length,min_length, иstrip, которые работают так же, как и дляCharField.-
strip -
По умолчанию
False. Если включено, перед проверкой регулярного выражения будет применено удаление пробелов.
- По умолчанию виджет:
SlugField
-
class SlugField(**kwargs)[source] -
- По умолчанию виджет:
TextInput - Пустое значение:
''(пустая строка) - Нормализуется до: Строка.
- Проверяет, что заданное значение содержит только буквы, цифры, символы подчёркивания и дефисы.
- Сообщения об ошибках:
required,invalid
Это поле предназначено для использования при представлении модели
SlugFieldв формах.Принимает необязательный параметр:
-
allow_unicode -
Булево значение, указывающее полю принимать символы Юникода помимо символов ASCII. По умолчанию
False.
- По умолчанию виджет:
TimeField
-
class TimeField(**kwargs)[source] -
- По умолчанию виджет:
TextInput - Пустое значение:
None - Нормализуется до: Объект Python
datetime.time. - Проверяет, что заданное значение является либо объектом
datetime.time, либо строкой, отформатированной в определённом формате времени. - Ключи сообщений об ошибках:
required,invalid
Принимает один необязательный аргумент:
-
input_formats -
Список форматов, используемых для попытки преобразования строки в объект
datetime.time.
Если аргумент
input_formatsне предоставлен, по умолчанию используются следующие форматы входных данных:'%H:%M:%S', # '14:30:59' '%H:%M', # '14:30'
- По умолчанию виджет:
URLField
-
class URLField(**kwargs)[source] -
- По умолчанию виджет:
URLInput - Пустое значение:
''(пустая строка) - Нормализуется до: Строка.
- Проверяет, что заданное значение является валидным URL.
- Ключи сообщений об ошибках:
required,invalid
Принимает следующие необязательные аргументы:
-
max_length
-
min_length
Они аналогичны
CharField.max_lengthиCharField.min_length. - По умолчанию виджет:
UUIDField
-
class UUIDField(**kwargs)[source] -
- По умолчанию виджет:
TextInput - Пустое значение:
''(пустая строка) - Нормализуется до: Объект
UUID. - Ключи сообщений об ошибках:
required,invalid
Это поле будет принимать любой формат строки, который принимается как аргумент
hexдля конструктораUUID. - По умолчанию виджет:
Slightly complex built-in Field classes
ComboField
-
class ComboField(**kwargs)[source] -
- Значение по умолчанию виджета:
TextInput - Пустое значение:
''(пустая строка) - Нормализуется до: Строки.
- Проверяет заданное значение по каждому из полей, указанных в качестве аргумента в
ComboField. - Ключи сообщений об ошибках:
required,invalid
Требуется один дополнительный аргумент:
-
fields -
Список полей, которые должны использоваться для проверки значения поля (в порядке их предоставления).
>>> from django.forms import ComboField >>> f = ComboField(fields=[CharField(max_length=20), EmailField()]) >>> f.clean('test@example.com') 'test@example.com' >>> f.clean('longemailaddress@example.com') Traceback (most recent call last): ... ValidationError: ['Ensure this value has at most 20 characters (it has 28).']
- Значение по умолчанию виджета:
MultiValueField
-
class MultiValueField(fields=(), **kwargs)[source] -
- Значение по умолчанию виджета:
TextInput - Пустое значение:
''(пустая строка) - Нормализуется до: типа, возвращаемого методом
compressподкласса. - Проверяет заданное значение по каждому из полей, указанных в качестве аргумента в
MultiValueField. - Ключи сообщений об ошибках:
required,invalid,incomplete
Агрегирует логику нескольких полей, которые вместе создают одно значение.
Это абстрактное поле и должно быть подклассом. В отличие от полей с одним значением, подклассы
MultiValueFieldне должны реализовыватьclean(), а вместо этого - реализовыватьcompress().Требуется один дополнительный аргумент:
-
fields -
Кортеж полей, значения которых очищаются и затем объединяются в одно значение. Каждое значение поля очищается соответствующим полем в
fields– первое значение очищается первым полем, второе значение очищается вторым полем и т.д. После очистки всех полей список очищенных значений объединяется в одно значение с помощьюcompress().
Также принимает некоторые необязательные аргументы:
-
require_all_fields -
По умолчанию
True, в этом случае ошибка валидацииrequiredбудет поднята, если не задано значение для любого поля.При установке в
False, атрибутField.requiredможет быть установлен наFalseдля отдельных полей, чтобы сделать их необязательными. Если не задано значение для обязательного поля, ошибка валидацииincompleteбудет поднята.Сообщения об ошибках по умолчанию
incompleteмогут быть определены в подклассеMultiValueField, или разные сообщения могут быть определены для каждого отдельного поля. Например:from django.core.validators import RegexValidator class PhoneField(MultiValueField): def __init__(self, **kwargs): # Define one message for all fields. error_messages = { 'incomplete': 'Enter a country calling code and a phone number.', } # Or define a different message for each field. fields = ( CharField( error_messages={'incomplete': 'Enter a country calling code.'}, validators=[ RegexValidator(r'^[0-9]+$', 'Enter a valid country calling code.'), ], ), CharField( error_messages={'incomplete': 'Enter a phone number.'}, validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid phone number.')], ), CharField( validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid extension.')], required=False, ), ) super().__init__( error_messages=error_messages, fields=fields, require_all_fields=False, **kwargs )
-
widget -
Должен быть подклассом
django.forms.MultiWidget. Значение по умолчаниюTextInput, что, вероятно, не очень полезно в данном случае.
-
compress(data_list)[source] -
Принимает список допустимых значений и возвращает «сжатую» версию этих значений – в одном значении. Например,
SplitDateTimeFieldявляется подклассом, который объединяет поле времени и поле даты в объектdatetime.Этот метод должен быть реализован в подклассах.
- Значение по умолчанию виджета:
SplitDateTimeField
-
class SplitDateTimeField(**kwargs)[source] -
- Значение по умолчанию виджета:
SplitDateTimeWidget - Пустое значение:
None - Нормализуется до: Объекта Python
datetime.datetime. - Проверяет, что заданное значение является объектом
datetime.datetimeили строкой, отформатированной в определенном формате даты и времени. - Ключи сообщений об ошибках:
required,invalid,invalid_date,invalid_time
Принимает два необязательных аргумента:
-
input_date_formats -
Список форматов, используемых для попытки преобразования строки в допустимый объект
datetime.date.
Если аргумент
input_date_formatsне предоставлен, используются форматы ввода по умолчанию дляDateField.-
input_time_formats -
Список форматов, используемых для попытки преобразования строки в допустимый объект
datetime.time.
Если аргумент
input_time_formatsне предоставлен, используются форматы ввода по умолчанию дляTimeField. - Значение по умолчанию виджета:
Поля, обрабатывающие отношения
Доступны два поля для представления отношений между моделями: ModelChoiceField и ModelMultipleChoiceField. Оба этих поля требуют единственного параметра queryset, который используется для создания выборов для поля. При проверке формы эти поля поместят либо один объект модели (в случае ModelChoiceField) или несколько объектов модели (в случае ModelMultipleChoiceField) в словарь cleaned_data формы.
Для более сложных случаев можно указать queryset=None при объявлении поля формы, а затем заполнить queryset в методе __init__() формы:
class FooMultipleChoiceForm(forms.Form):
foo_select = forms.ModelMultipleChoiceField(queryset=None)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['foo_select'].queryset = ...
ModelChoiceField
-
class ModelChoiceField(**kwargs)[source] -
- Значение по умолчанию виджета:
Select - Пустое значение:
None - Нормализуется до: экземпляра модели.
- Проверяет, что заданный id существует в наборе запросов.
- Ключи сообщений об ошибках:
required,invalid_choice
Позволяет выбрать один объект модели, подходящий для представления внешнего ключа. Обратите внимание, что виджет по умолчанию для
ModelChoiceFieldстановится непрактичным, когда количество записей увеличивается. Не следует использовать его для более чем 100 элементов.Требуется один аргумент:
-
queryset -
Набор объектов модели, из которого выводятся варианты для поля и который используется для проверки выбора пользователя. Вычисляется при рендеринге формы.
ModelChoiceFieldтакже принимает два необязательных аргумента:-
empty_label -
По умолчанию виджет
<select>используется полемModelChoiceFieldи имеет пустой выбор вверху списка. Можно изменить текст этой метки (по умолчанию"---------") с помощью атрибутаempty_label, или отключить пустую метку полностью, установивempty_labelвNone:# A custom empty label field1 = forms.ModelChoiceField(queryset=..., empty_label="(Nothing)") # No empty label field2 = forms.ModelChoiceField(queryset=..., empty_label=None)
Обратите внимание, что если
ModelChoiceFieldтребуется и имеет значение по умолчанию, пустой выбор не создается (независимо от значенияempty_label).
-
to_field_name -
Этот необязательный аргумент используется для указания поля, которое будет использоваться в качестве значения вариантов в виджете поля. Убедитесь, что это уникальное поле для модели, в противном случае выбранное значение может соответствовать более чем одному объекту. По умолчанию он установлен на
None, в этом случае будет использоваться первичный ключ каждого объекта. Например:<select id="id_field1" name="field1"> <option value="obj1.pk">Object1</option> <option value="obj2.pk">Object2</option> ... </select>
и:
# to_field_name provided field2 = forms.ModelChoiceField(queryset=..., to_field_name="name")
будет возвращать:
<select id="id_field2" name="field2"> <option value="obj1.name">Object1</option> <option value="obj2.name">Object2</option> ... </select>
Метод
__str__()модели будет вызван для генерации строковых представлений объектов для использования в вариантах поля. Чтобы предоставить настраиваемые представления, подклассируйтеModelChoiceFieldи переопределитеlabel_from_instance. Этот метод будет получать объект модели и должен возвращать строку, подходящую для его представления. Например:from django.forms import ModelChoiceField class MyModelChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "My Object #%i" % obj.id - Значение по умолчанию виджета:
ModelMultipleChoiceField
-
class ModelMultipleChoiceField(**kwargs)[source] -
- Значение по умолчанию виджета:
SelectMultiple - Пустое значение: Пустой
QuerySet(self.queryset.none()) - Нормализуется в: Список объектов модели.
- Проверяет, что каждый идентификатор в заданном списке значений существует в наборе запроса.
- Ключи сообщений об ошибках:
required,list,invalid_choice,invalid_pk_value
Сообщение
invalid_choiceможет содержать%(value)s, а сообщениеinvalid_pk_valueможет содержать%(pk)s, которые будут заменены соответствующими значениями.Позволяет выбрать один или несколько объектов модели, подходящее для представления множественного отношения «многие ко многим». Как и в случае с
ModelChoiceField, вы можете использоватьlabel_from_instanceдля настройки представлений объектов.Требуется один аргумент:
-
queryset -
То же, что и
ModelChoiceField.queryset.
Принимает один необязательный аргумент:
-
to_field_name -
То же, что и
ModelChoiceField.to_field_name.
- Значение по умолчанию виджета:
Создание пользовательских полей
Если встроенные классы Field не удовлетворяют вашим потребностям, вы можете легко создать пользовательские классы Field. Для этого просто создайте подкласс django.forms.Field. Единственные требования — реализация метода clean() и метода __init__(), который принимает основные аргументы, упомянутые выше (required, label, initial, widget, help_text).
Также можно настроить доступ к полю, переопределив get_bound_field().
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.0/ref/forms/fields/