django form обязательное поле
Обязательное поле в Django модели в форме
у меня есть форма, где несколько полей выходят по мере необходимости, когда я их тоже не хочу. Вот форма от models.py
в реальной модели схемы поля определяются следующим образом:
мой views.py ибо это здесь:
что я могу сделать, чтобы эти два поля не были обязательными?
6 ответов
Если вы не хотите изменять пустые настройки для своих полей внутри моделей (это нарушит нормальную проверку на сайте администратора), вы можете сделать следующее в своем классе формы:
переопределенный конструктор не повредит никакой функциональности.
Если поле модели имеет значение blank=True, то required имеет значение False в поле формы. В противном случае required=True
EDIT: не знаю, поможет ли это кому-нибудь еще, но я решил проблему, которая у меня была. Наша форма имеет некоторый текст по умолчанию в поле (в этом случае слово «to» для указания поля является датой окончания; поле называется «end_time»). Я специально искал слово » to » в методе clean() формы (я также пробовал метод clean_end_time (), но он никогда не вызывался) и устанавливал значение clean_data переменная None, как предложено в этот билет Джанго. Однако ничто из этого не имело значения, поскольку (я думаю) проверка модели уже вырвала недопустимый формат даты «to», не давая мне возможности перехватить его.
расширяя ответ DataGreed, я создал Mixin, который позволяет указать fields_required переменной на Meta класс такой:
Django Book: изменение полей на необязательные
После того как вы немного поработаете с панелью управления вы, возможно, заметите некоторые ограничения, например — форма редактирования записи требует, что бы все поля были заполнены, хотя в некоторых случаях вы хотели бы оставить их пустыми. Например, вы хотите что бы поле email модели Authors было не обязательным для заполнения (опциональным).
После того как вы добавили blank=True — перезагрузите страницу «Add author» и вы увидите, что поле Email больше не выделено жирным шрифтом. Теперь вы можете добавить нового автора без указания адреса почты — сообщений «This field is required» больше не будет.
Изменение даты и числовых полей
Описанный пример с blank=True подойдёт и для полей даты и чисел, но тут требуется дополнительное пояснение и действие.
В SQL значение NULL отличается от пустой строки, так как же специальный объект None в Python отличается от пустой строки («»). Это значит, что некоторые символьные поля (такие как VARCHAR ) могут содержать значения и NULL и пустые строки.
Это может вызвать нежелательную двусмысленность и путаницу: «Почему эта запись имеет значение NULL, а другая — пустую строку?» и «Как мне получить все записи с пустыми значениями — должен ли я искать и NULL и пустые строки, или только пустые строки?»
Что бы избежать такой путаницы — сгенерированный Django запрос CREATE TABLE (который мы рассматривали в предыдущей главе) добавляет явное указание NOT NULL для описания каждой колонки. Например, вот запрос для нашей модели Author :
Как правило это оптимальное решение для ваших приложений, которое избавит вас от головной боли с несогласованностью данных в базе данных, и оно работает со всеми частями Django, такими как панель управления, которая вставляет пустые строки (а не значение NULL ), когда вы оставляете пустое поле при добавлении или редактировании записи.
Однако, имеются исключения, которые касаются полей типа даты, времени и чисел в вашей базе данных — они не принимают пустые строки в качестве корректных значений. Если вы попробуете добавить пустую строку в колонку с датой или цифрами — вы скорее всего получите ошибку базы данных, в зависимости от типа сервера баз данных (PostgreSQL вернёт ошибку, MySQL — может вернуть — а может и нет, в зависимости от используемой версии, времени для и фазы луны). В таком случае — NULL единственный вариант что бы задать пустое значение. В моделях Django вы можете указать, что использование NULL разрешено, добавив строку null=True к нужному полю.
Или для PostgreSQL:
Мы рассмотрим изменения схемы баз данных подробнее далее в нашей книге.
Возвращаясь к панели управления Django — теперь в форме редактирования «Add book» поле даты публикации можно оставлять пустым.
Собственное поле формы в Django
Источник данных для автодополнения
Наш виджет будет брать данные из модели, куда, собственно, и сохраняются введенные теги
Так как теги могут содержать пробелы, и прочий мусор, введем в модель поле slug, четко идентифицирующее тег по содержимому, независимо от того, сколько пробелов между словами в названии тега. Введем также метод класса get_or_create, возвращающий тег, если он найден по полю slug, или создающий новый тег в обратном случае. Кроме того, перед созданием нового тега, мы приводим его к нижнему регистру в методе save для единообразия.
View для работы автодополнения
Набросаем небольшое представление, возвращающее список тегов, начинающихся с введенных символов.
Плагин Tag-It! передает введенную строку в переменной term.
Виджет и поле формы
Виджет и поле формы можно объявить непосредственно в месте их применения — в forms.py. Я так и сделал, так как не планировал его использовать где-либо еще.
Виджет я унаследовал от скрытого поля ввода, так как визуализацией занимается плагин Tag-It.
tag-it.js и jquery.tagit.css — файлы плагина Tag-It. Содержимое tagit_widget.js будет описано ниже.
В объявлении поля формы указываем виджет. В конструктор кроме обычных параметров передаем модель тегов, с помощью которой список названий тегов преобразуем в список объектов-тегов в методе to_python. Метод prepare_value делает обратное преобразование. В методе widget_attrs добавляем скрытому полю атрибут «class», по которому скрипт будет находить нужные поля для применения к ним плагина Tag-It.
Сам скрипт находится в файле tagit_widget.js и имеет следующий вид:
О дополнительных опциях плагина можно посмотреть здесь. Скажу только, что здесь я разрешаю тегам содержать пробелы (allowSpaces), делаю автодополнение без задержки после ввода (delay), начиная со второго введенного символа (minLength) и беря варианты из нашей вьюхи (source).
Заключение
Поле готово к использованию. Применить его можно следующим образом:
Главное, не забыть в шаблоне подключить статику из этой формы
Поля формы ¶
Когда вы создаете Form класс, наиболее важной частью является определение полей формы. Каждое поле имеет настраиваемую логику проверки, а также несколько других ловушек.
Field. clean ( значение ) ¶
Аргументы основного поля ¶
Каждый Field конструктор класса принимает по крайней мере эти аргументы. Некоторые Field классы принимают дополнительные аргументы, зависящие от поля, но всегда следует принимать следующее:
required ¶
Чтобы указать, что поле не является обязательным, перейдите required=False к Field конструктору:
label ¶
Как объяснено выше в разделе «Вывод форм как HTML», метка по умолчанию для a Field создается из имени поля путем преобразования всех подчеркиваний в пробелы и верхнего регистра первой буквы. Укажите, label если это поведение по умолчанию не приводит к адекватной метке.
Вот полный пример, Form который реализуется label для двух его полей. Мы указали, auto_id=False чтобы упростить вывод:
label_suffix ¶
initial ¶
Чтобы указать динамические начальные данные, см. Form.initial Параметр.
Вы можете подумать, а почему бы просто не передать словарь начальных значений в виде данных при отображении формы? Что ж, если вы это сделаете, вы активируете проверку, и вывод HTML будет включать любые ошибки проверки:
Вот почему initial значения отображаются только для несвязанных форм. Для связанных форм в выводе HTML будут использоваться связанные данные.
Также обратите внимание, что initial значения не используются в качестве «резервных» данных при проверке, если не указано значение конкретного поля. initial значения предназначены только для отображения начальной формы:
Вместо константы вы также можете передать любой вызываемый объект:
Вызываемый объект будет оцениваться только при отображении несвязанной формы, а не при ее определении.
widget ¶
help_text ¶
Вот полный пример, Form который реализуется help_text для двух его полей. Мы указали, auto_id=False чтобы упростить вывод:
error_messages ¶
А вот собственное сообщение об ошибке:
В разделе встроенных классов полей ниже каждый Field определяет ключи сообщений об ошибках, которые он использует.
validators ¶
validators Аргумент позволяет предоставить список функций проверки для этого поля.
localize ¶
localize Аргумент позволяет локализацию ввода данных формы, а также обработанную продукцию.
disabled ¶
Проверка, изменились ли данные поля ¶
has_changed() ¶
См. Form.has_changed() Документацию для получения дополнительной информации.
Встроенные Field классы ¶
Естественно, forms библиотека поставляется с набором Field классов, которые представляют общие потребности в валидации. В этом разделе описано каждое встроенное поле.
BooleanField ¶
CharField ¶
Имеет четыре необязательных аргумента для проверки:
Если предоставлены, эти аргументы гарантируют, что строка будет не больше или не меньше заданной длины.
Если True (по умолчанию), значение будет очищено от начальных и конечных пробелов.
Значение, которое следует использовать для представления «пусто». По умолчанию пустая строка.
ChoiceField ¶
Принимает один дополнительный аргумент:
TypedChoiceField ¶
Принимает дополнительные аргументы:
Значение, которое следует использовать для представления «пусто». По умолчанию пустая строка; None еще один распространенный выбор здесь. Обратите внимание, что это значение не будет принудительно изменяться функцией, указанной в coerce аргументе, поэтому выберите его соответствующим образом.
DateField ¶
Принимает один необязательный аргумент:
Список форматов, используемых для попытки преобразовать строку в допустимый datetime.date объект.
DateTimeField ¶
Принимает один необязательный аргумент:
Список форматов, используемых для попытки преобразовать строку в допустимый datetime.datetime объект, в дополнение к форматам ISO 8601.
Добавлена поддержка синтаксического анализа строки даты ISO 8601 (включая необязательный часовой пояс).
DecimalField ¶
Принимает четыре необязательных аргумента:
Они управляют диапазоном значений, разрешенных в поле, и должны быть указаны как decimal.Decimal значения.
Максимальное количество цифр (до десятичной точки плюс цифры после десятичной точки с удаленными ведущими нулями), разрешенное в значении.
Максимально разрешенное количество десятичных знаков.
DurationField ¶
EmailField ¶
FileField ¶
max_length Ошибка относится к длине имени файла. В сообщении об ошибке для этого ключа, %(max)d будет заменена максимальная длина имени файла и %(length)d будет заменена текущая длина имени файла.
FilePathField ¶
Поле позволяет выбирать файлы внутри определенного каталога. Требуется пять дополнительных аргументов; path требуется только :
Абсолютный путь к каталогу, содержимое которого вы хотите перечислить. Этот каталог должен существовать.
Шаблон регулярного выражения; только файлы с именами, соответствующими этому выражению, будут допущены в качестве выбора.
FloatField ¶
ImageField ¶
Для использования ImageField требуется, чтобы Pillow был установлен с поддержкой используемых вами форматов изображений. Если вы столкнулись с ошибкой при загрузке изображения, это обычно означает, что Pillow не понимает его формат. Чтобы исправить это, установите соответствующую библиотеку и переустановите Pillow. corrupt image
IntegerField ¶
Принимает два необязательных аргумента для проверки:
Они управляют диапазоном значений, разрешенных в поле.
JSONField ¶
Принимает два необязательных аргумента:
json.JSONDecoder Подкласс десериализация входа. При десериализации может потребоваться учет того факта, что вы не можете быть уверены в типе ввода. Например, вы рискуете вернуть a, datetime который на самом деле был строкой, которая случайно оказалась в том же формате, который был выбран для datetime s.
decoder Может быть использовано для подтверждения ввода. Если json.JSONDecodeError возникает во время десериализации, ValidationError будет повышен.
JSONField в большинстве случаев не очень удобен для пользователя. Однако это полезный способ форматирования данных из клиентского виджета для отправки на сервер.
GenericIPAddressField ¶
Поле, содержащее адрес IPv4 или IPv6.
Принимает два необязательных аргумента:
MultipleChoiceField ¶
TypedMultipleChoiceField ¶
NullBooleanField ¶
NullBooleanField может использоваться с виджетами, такими как Select или RadioSelect путем предоставления виджета choices :
RegexField ¶
Принимает один обязательный аргумент:
Регулярное выражение, заданное в виде строки или скомпилированного объекта регулярного выражения.
SlugField ¶
Это поле предназначено для использования при представлении модели SlugField в формах.
Принимает два необязательных параметра:
Значение, которое следует использовать для представления «пусто». По умолчанию пустая строка.
TimeField ¶
Принимает один необязательный аргумент:
Список форматов, используемых для попытки преобразовать строку в допустимый datetime.time объект.
URLField ¶
UUIDField ¶
Это поле будет принимать любой строковый формат, принятый в качестве hex аргумента UUID конструктора.
Слегка сложные встроенные Field классы ¶
ComboField ¶
Принимает один дополнительный обязательный аргумент:
Список полей, которые следует использовать для проверки значения поля (в том порядке, в котором они указаны).
MultiValueField ¶
Агрегирует логику нескольких полей, которые вместе создают одно значение.
Принимает один дополнительный обязательный аргумент:
Также принимает некоторые необязательные аргументы:
incomplete Сообщение об ошибке по умолчанию может быть определено в MultiValueField подклассе, или различные сообщения могут быть определены для каждого отдельного поля. Например:
Этот метод должен быть реализован в подклассах.
SplitDateTimeField ¶
Принимает два необязательных аргумента:
Список форматов, используемых для попытки преобразовать строку в допустимый datetime.date объект.
Список форматов, используемых для попытки преобразовать строку в допустимый datetime.time объект.
Поля, которые обрабатывают отношения ¶
Для более сложных применений вы можете указать queryset=None при объявлении поля формы, а затем заполнить queryset в __init__() методе формы :
Оба ModelChoiceField и ModelMultipleChoiceField имеют iterator атрибут, который указывает класс, используемый для итерации по набору запросов при генерации вариантов выбора. См. Подробности в разделе « Итерация выбора отношений».
ModelChoiceField ¶
Позволяет выбрать один объект модели, подходящий для представления внешнего ключа. Обратите внимание, что виджет по умолчанию для ModelChoiceField становится непрактичным, когда количество записей увеличивается. Вам не следует использовать его для более чем 100 предметов.
Требуется единственный аргумент:
Набор QuerySet объектов модели, на основе которых производятся варианты выбора для поля и который используется для проверки выбора пользователя. Он оценивается при рендеринге формы.
ModelChoiceField также принимает два необязательных аргумента:
По умолчанию виджет, используемый пользователем, ModelChoiceField будет иметь пустой выбор вверху списка. Вы можете изменить текст этой метки (которая используется «———» по умолчанию) с помощью empty_label атрибута, или вы можете полностью отключить пустую метку, установив empty_label значение None :
Обратите внимание, что если a ModelChoiceField является обязательным и имеет начальное значение по умолчанию, пустой выбор не создается (независимо от значения empty_label ).
Документация Django 1.6
При создании класса Form наиболее важной деталью является определение полей формы. Каждое поле обладает собственной логикой проверки вводимых данных наряду с дополнительными возможностями.
Базовые аргументы поля¶
Каждый конструктор класса Field принимает эти аргументы. Некоторые классы Field принимают дополнительные аргументы. Перечисленные ниже аргументы принимаются всеми полями:
required ¶
По умолчанию каждый класс Field предполагает значение обязательным. Таким образом, если вы передадите ему пустое значение, т.е. None или пустую строку ( «» ), то метод clean() вызовет исключение ValidationError :
Для того, чтобы сделать поле “необязательным” передайте required=False в конструктор Field :
label ¶
Аргумент label позволяет вам определить “видимую людьми” метку для этого поля. Оно используется когда Field отображается на форме.
Ниже приведён пример формы, которая определяет метки для двух своих полей. Мы используем auto_id=False для упрощения вывода:
initial ¶
Аргумент initial позволяет определять начальное значение для поля, при его отображении на незаполненной форме.
Использование этого аргумента подходит для отображения пустой формы, в которой поля будут иметь указанные значения. Например:
Вам могло придти в голову просто передать словарь с начальными значениями при отображении формы. Но если так сделать, то вы запустите механизм проверки данных и HTML код формы будет содержать в себе результаты этой проверки:
Это главная причина, по которой начальные значения отображаются только на незаполненных формах. Для заполненных форм, HTML код всегда будет содержать введённые в форму данные.
Также следует отметить, что начальные значения не используются в качестве значений по умолчанию во время проведения проверки данных в полях формы. Начальные значения, определённые в initial предназначены лишь для первого отображения формы:
Вместо констант вы также можете передавать любой исполняемый объект ( callable ):
Исполняемый объект будет вычислен только в момент отображения незаполненной формы.
widget ¶
help_text ¶
Ниже представлен пример формы, в которой help_text определён у двух полей. Мы используем auto_id=False для упрощения вывода:
error_messages ¶
Аргумент error_messages позволяет изменить стандартные сообщения об ошибках, которые выдаёт поле. Создайте словарь с ключами тех сообщений, которые вы желаете изменить. Например, стандартное сообщение об ошибке:
А вот собственное сообщение об ошибке:
В разделе классы встроенных полей показано, что каждое поле определяет ключи сообщений об ошибках, которые оно использует.
validators ¶
Аргумент validators позволяет указать список функций, осуществляющих проверку поля.
Обратитесь к документации на валидаторы для подробной информации.
localize ¶
Аргумент localize включает локализацию для данных формы, как на входе, так и на выходе.
Обратитесь к документации на формат локализации для подробной информации.
Классы встроенных полей¶
Для каждого поля мы указываем виджет, который используется в случае, если вы явно не определили нужный вам виджет. Мы также указываем значение, которое будет возвращено, если вы предоставили пустое значение (см. required).
BooleanField ¶
Стандартный виджет: :class: CheckboxInput
Возвращает: True или False языка Python.
CharField ¶
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Имеет два необязательных аргумента для проверки:
Если они указаны, то производится соответствующая проверка длины полученной строки.
ChoiceField ¶
Стандартный виджет: :class: Select
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Проверяет, что введённое значение присутствует в списке вариантов.
Принимает один дополнительный обязательный аргумент:
Итерируемый объект (т.е. список или кортеж), содержащий ряд двухэлементных кортежей, для использования в качестве вариантов для данного поля. Этот аргумент принимает те же форматы, что и аргумент choices поля модели. Обратитесь к справочнику по полям модели для подробной информации.
TypedChoiceField ¶
Стандартный виджет: :class: Select
Проверяет, что полученное значение присутствует в списке вариантов и может быть преобразовано в нужный тип.
Принимает дополнительные аргументы:
DateField ¶
Стандартный виджет: :class: DateInput
Возвращает: Объект datetime.date языка Python.
Принимает один необязательный аргумент:
Если аргумент input_formats не предоставлен, то используются следующие форматы:
Обратитесь к документации на формат локализации для подробной информации.
DateTimeField ¶
Возвращает: Объект datetime.datetime языка Python.
Принимает один необязательный аргумент:
Если аргумент input_formats не предоставлен, то используются следующие форматы:
Обратитесь к документации на формат локализации для подробной информации.
DecimalField ¶
Возвращает: Тип decimal языка Python.
Проверяет, что полученное значение является десятичным. Пробелы до и после значения игнорируются.
Сообщения об ошибках max_value и min_value могут содержать шаблон«%(limit_value)s«, который будет заполнен соответствующим значением.
Принимает четыре необязательных аргумента:
Максимальное число разрядов (до и после десятичной точки, впередистоящие нули обрезаются) разрешённых в значении.
Максимальное число разрешённых десятичных разрядов.
EmailField ¶
Стандартный виджет: :class: EmailInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Проверяет, что полученное значение является правильным адресом электронной почты, используя досточно сложное регулярное выражение.
FileField ¶
Стандартный виджет: :class: ClearableFileInput
Может проверять, что данные непустого файла были связаны с формой.
Для получения подробностей об объекте « UploadedFile`, см. документацию по загрузке файлов.
При использовании FileField на форме, вы должны не забыть связать данные файла с формой.
Ошибка max_length относится к длине имени файла. В сообщении об ошибке шаблон %(max)d будет заменён максимальной длиной имени файла, а %(length)d – длиной имени текущего файла.
FilePathField ¶
Стандартный виджет: :class: Select
Возвращает: Объект Unicode.
Проверяет, что выбоанное значение присутствует в списке вариантов.
Поле позволяет выбирать файл из определённого каталога. Оно принимает три дополнительных аргумента, требуя обязательного наличия аргумента path :
Абсолютный путь до каталога, содержимое которого вы желаете отобразить. Этот каталог должен существовать.
Шаблон регулярного выражения. Отображаться будут только те файлы, которые подходят под указанное регулярное выражение.
FloatField ¶
Возвращает: Тип float языка Python.
Проверяет, что полученное значение является числом с плавающей точкой. Пробелы до и после значения не влияют на преобразование значения, так как эта ситуация обрабатывается функцией float() языка Python.
ImageField ¶
Стандартный виджет: :class: ClearableFileInput
Проверяет, что данные файла были связаны с формой, а затем, что файл является изображением, формат которого поддерживается библиотекой Pillow/PIL.
Использование ImageField требует наличия Pillow (рекомендуется) или Python Imaging Library (PIL) с поддержкой используемых вами форматов изображений. Если вы сталкиваетесь с ошибкой corrupt image при загрузке изображения, обычно это означает, что Pillow или PIL не поддерживает такой формат изображения. Для решения этой проблемы, установите соответствующую библиотеку и переустановите Pillow или PIL.
При использовании ImageField на форме, вы должны не забыть связать данные файла с формой.
IntegerField ¶
Возвращает: Тип integer или long языка Python.
Проверяет, что полученное значение является целым числом. Пробелы до и после значения не влияют на преобразование значения, так как эта ситуация обрабатывается функцией int() языка Python.
Сообщения об ошибках max_value и min_value могут содержать шаблон«%(limit_value)s«, который будет заполнен соответствующим значением.
Принимает два необязательных аргумента для проверки:
Они определяют диапазон значений, разрешённый для поля.
IPAddressField ¶
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Проверяет с помощью регулярного выражения, что полученное значение является правильным IPv4 адресом.
GenericIPAddressField ¶
Поле для обработки адресов IPv4 или IPv6.
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode. Преобразование IPv6 адресов описано далее.
Проверяет, что полученное значение является правильным IP адресом.
Принимает два необязательных аргумента:
MultipleChoiceField ¶
Стандартный виджет: :class: SelectMultiple
Пустое значение: [] (пустой список).
Возвращает: Список объектов Unicode.
Проверяет, что каждое значение из полученного списка присутствует в списке вариантов.
TypedMultipleChoiceField ¶
Стандартный виджет: :class: SelectMultiple
Проверяет, что полученные значения присутствуют в списке вариантов и могут быть преобразованы в нужный тип.
NullBooleanField ¶
Стандартный виджет: :class: NullBooleanSelect
RegexField ¶
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Проверяет, что полученное значение совпадает с указанным регулярным выражением.
Принимает один обязательный аргумент:
Регулярное выражение в виде строки или скомпилированного объекта регулярного выражения.
SlugField ¶
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Проверяет, что полученное значение содержит только буквы, цифры, подчёркивания и тире.
TimeField ¶
Стандартный виджет: :class: TextInput
Возвращает: Объект datetime.time языка Python.
Проверяет, что переданное значение является объектом datetime.time или строкой, отформатированной в нужном виде.
Принимает один необязательный аргумент:
Если аргумент input_formats не предоставлен, то используются следующие форматы:
URLField ¶
Стандартный виджет: :class: URLInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Проверяет, что полученное значение является правильным URL.
Принимает следующие необязательные аргументы:
Достаточно сложные встроенные классы Field ¶
ComboField ¶
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Возвращает: Объект Unicode.
Принимает один дополнительный обязательный аргумент:
Список полей, которые должны использоваться для проверки значения поля (в порядке их определения).
MultiValueField ¶
Стандартный виджет: :class: TextInput
Пустое значение: » (пустая строка).
Агрегирует логику нескольких полей, создавая единое значение.
Принимает один дополнительный обязательный аргумент:
Этот метод должен быть реализован в дочерних классах.
SplitDateTimeField ¶
Стандартный виджет: :class: SplitDateTimeWidget
Возвращает: Объект datetime.datetime языка Python.
Проверяет, что переданное значение является объектом datetime.datetime или строкой, отформатированной в нужном виде.
Принимает два необязательных аргумента:
Поля для обработки связей¶
ModelChoiceField ¶
Стандартный виджет: :class: Select
Возвращает: Экземпляр модели.
Проверяет, что полученный идентификатор присутствует в выборке.
Позволяет выбор единственного объекта модели, имеет смысл при отображении внешнего ключа. Следует отметить, что стандартный виджет для ModelChoiceField становится непрактичным когда число его значений растёт. Сотня значений уже становится проблемой.
Единственный обязательный аргумент:
Объект QuerySet содержит выборку объектов модели, которые являются значениями для этого поля и которые будут использоваться для проверки полученных данных.
ModelChoiceField принимает один необязательный аргумент:
ModelMultipleChoiceField ¶
Стандартный виджет: :class: SelectMultiple
Пустое значение: Пустой QuerySet (self.queryset.none())
Возвращает: Выборку с экземплярами модели.
Проверяет, что каждый идентификатор полученного списка значений присутствует в выборке.
The empty and normalized values were changed to be consistently QuerySets instead of [] and QuerySet respectively.
Объект QuerySet содержит выборку объектов модели, которые являются значениями для этого поля и которые будут использоваться для проверки полученных данных.