необязательное поле django формы

Необязательное поле django формы

После того, как вы познакомились с интерфейсом администратора, вы наверное заметили ограничение — форма редактирования требует, что бы каждое поле было заполнено, тогда как вы хотели, чтобы некоторые поля были необязательными. Например, мы желаем, чтобы поле email модели Author было необязательным, то есть оно могло принимать пустую строку. В реальности, возможно, вам не потребуется хранить адреса электронной почты всех авторов.

Это указывает Django, что поле адреса электронной почты может быть пустым. По умолчанию, все поля имеют blank=False — это означает, что поля не могут быть пустыми.

Необязательные числовые поля и поля с датой

Особо надо отметить использование blank=True совместно с полями даты/времени и численными. Погрузимся в теорию.

Что бы избежать подобной путаницы, Django автоматически создает операторы CREATE TABLE (которые рассматривались в главе « Модели » ), добавляя явно NOT NULL к каждому полю. Например, сгенерированый запрос создания таблицы для модели Author :

В большинстве случаев, такое стандартное поведение является оптимальным для вашего приложения и избавит вас от проблем, вызванных несоответствием данных. И оно отлично работает с остальными компонентами Django: такими как административный интерфейс, который вставляет пустую строку (а не значение NULL ), если вы оставляете символьное поле пустым.

(Обратите внимание, что такой синтаксис специфичен для PostgreSQL.)

Завершив изменения, вернёмся к интерфейсу администратора. Теперь форма редактирования книги позволяет оставлять пустой дату публикации.

1 комментарий | Оставьте комментарий

В MySQL код для изменения значения свойства поля с NOT NULL на NULL выглядит так:
ALTER TABLE books_book MODIFY books_book.publication_date date NULL;

Содержимое
Добавь себя на карту!

Нашли опечатку?

Источник

Создание форм из моделей ¶

ModelForm ¶

Если вы создаете приложение на основе базы данных, скорее всего, у вас будут формы, которые близко соответствуют моделям Django. Например, у вас может быть BlogComment модель, и вы хотите создать форму, позволяющую людям отправлять комментарии. В этом случае было бы излишним определять типы полей в вашей форме, потому что вы уже определили поля в своей модели.

По этой причине Django предоставляет вспомогательный класс, который позволяет вам создавать Form класс из модели Django.

Типы полей ¶

Созданный Form класс будет иметь поле формы для каждого указанного поля модели в порядке, указанном в fields атрибуте.

Как и следовало ожидать, ForeignKey и ManyToManyField типы полей модели являются частными случаями:

Кроме того, каждое сгенерированное поле формы имеет следующие атрибуты:

Наконец, обратите внимание, что вы можете переопределить поле формы, используемое для данного поля модели. См. Раздел « Замена полей по умолчанию» ниже.

Полный пример ¶

Рассмотрим этот набор моделей:

С этими моделями приведенные ModelForm выше подклассы были бы примерно эквивалентны этому (единственное отличие состоит в save() методе, который мы обсудим чуть позже):

Проверка на ModelForm ¶

Есть два основных этапа проверки ModelForm :

Процесс очистки изменяет экземпляр модели, переданный ModelForm конструктору, различными способами. Например, любые поля даты в модели преобразуются в фактические объекты даты. Неудачная проверка может привести к тому, что базовый экземпляр модели окажется в несогласованном состоянии, поэтому повторно использовать его не рекомендуется.

Переопределение метода clean () ¶

Вы можете переопределить clean() метод в форме модели, чтобы обеспечить дополнительную проверку так же, как и в обычной форме.

Экземпляр формы модели, прикрепленный к объекту модели, будет содержать instance атрибут, который дает его методам доступ к этому конкретному экземпляру модели.

Взаимодействие с валидацией модели ¶

В рамках процесса проверки ModelForm будет вызывать clean() метод каждого поля в вашей модели, у которого есть соответствующее поле в вашей форме. Если вы исключили какие-либо поля модели, проверка этих полей выполняться не будет. См. Документацию по проверке формы, чтобы узнать больше о том, как работают очистка и проверка полей.

Соображения относительно модели error_messages ¶

Сообщения об ошибках, определенные на уровне или на уровне мета-формы, всегда имеют приоритет над сообщениями об ошибках, определенными на уровне. form field model field

Вы можете переопределить сообщения об ошибках, NON_FIELD_ERRORS возникающие при проверке модели, добавив NON_FIELD_ERRORS ключ в error_messages словарь ModelForm внутреннего Meta класса:

save() Метод ¶

У каждого ModelForm тоже есть save() метод. Этот метод создает и сохраняет объект базы данных из данных, привязанных к форме. Подкласс ModelForm может принимать существующий экземпляр модели в качестве аргумента ключевого слова instance ; если он предоставлен, save() обновит этот экземпляр. Если он не указан, save() будет создан новый экземпляр указанной модели:

modelformset_factory() используется formset_factory() для создания наборов форм. Это означает, что модельный набор форм является расширением базового набора форм, который знает, как взаимодействовать с конкретной моделью.

При использовании наследования нескольких таблиц формы, созданные фабрикой наборов форм, будут содержать поле родительской ссылки (по умолчанию

_ptr ) вместо id поля.

Изменение набора запросов ¶

По умолчанию, когда вы создаете набор форм из модели, набор форм будет использовать набор запросов, который включает все объекты в модели (например, Author.objects.all() ). Вы можете изменить это поведение, используя queryset аргумент:

Затем передайте свой BaseAuthorFormSet класс фабричной функции:

Изменение формы ¶

Затем передайте форму модели в функцию factory:

Указание виджетов для использования в форме с помощью widgets ¶

Используя widgets параметр, вы можете указать словарь значений для настройки ModelForm класса виджета для определенного поля. Это работает так же, как widgets словарь во внутреннем Meta классе ModelForm произведения:

Включение локализации для полей с localized_fields ¶

С помощью localized_fields параметра вы можете включить локализацию полей в форме.

Предоставление начальных значений ¶

Сохранение объектов в наборе форм ¶

Передайте, commit=False чтобы вернуть несохраненные экземпляры модели:

После вызова save() ваш модельный набор форм будет иметь три новых атрибута, содержащих изменения набора форм:

models.BaseModelFormSet. changed_objects ¶ models.BaseModelFormSet. deleted_objects ¶ models.BaseModelFormSet. new_objects ¶

Ограничение количества редактируемых объектов ¶

max_num не препятствует отображению существующих объектов:

Кроме того, extra=0 это не препятствует созданию новых экземпляров модели, поскольку вы можете добавлять дополнительные формы с помощью JavaScript или отправлять дополнительные данные POST. Наборы форм еще не предоставляют функциональные возможности для представления «только редактирование», которое предотвращает создание новых экземпляров.

Читайте также:  снять квартиру в сургуте на сутки недорого

Если значение max_num больше, чем количество существующих связанных объектов, extra в набор форм будет добавлено до дополнительных пустых форм, при условии, что общее количество форм не превышает max_num :

Использование набора форм модели на виде ¶

Наборы форм очень похожи на наборы форм. Допустим, мы хотим представить набор форм для редактирования Author экземпляров модели:

Перекрытие clean() на ModelFormSet ¶

Использование настраиваемого набора запросов ¶

Как указывалось ранее, вы можете переопределить набор запросов по умолчанию, используемый набором форм модели:

Обратите внимание, что в этом примере мы передаем queryset аргумент как в случаях, так POST и в GET случаях.

Использование набора форм в шаблоне ¶

Есть три способа визуализировать набор форм в шаблоне Django.

Во-первых, вы можете позволить набору форм выполнять большую часть работы:

Во-вторых, вы можете визуализировать набор форм вручную, но пусть форма сама сама себя обрабатывает:

В-третьих, вы можете вручную отобразить каждое поле:

Если вы решите использовать этот третий метод и не перебираете поля с помощью цикла, вам необходимо отобразить поле первичного ключа. Например, если вы отдавая и поле модели: <% for %>name age

Встроенные наборы форм ¶

Если вы хотите создать набор форм, позволяющий редактировать книги, принадлежащие определенному автору, вы можете сделать это:

Переопределение методов на InlineFormSet ¶

Например, если вы хотите переопределить clean() :

Затем, когда вы создаете свой встроенный набор форм, передайте необязательный аргумент formset :

Более одного внешнего ключа для одной модели ¶

Чтобы решить эту проблему, вы можете использовать fk_name для inlineformset_factory() :

Использование встроенного набора форм в представлении ¶

Вы можете захотеть предоставить представление, которое позволяет пользователю редактировать связанные объекты модели. Вот как это сделать:

Указание виджетов для использования во встроенной форме ¶

Источник

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” поле даты публикации можно оставлять пустым.

Источник

Поля формы¶

Аргументы по основному полю¶

Каждый конструктор класса Field принимает по крайней мере эти аргументы. Некоторые классы Field принимают дополнительные, специфические для конкретной области аргументы, но следующие должны всегда приниматься:

required ¶

Чтобы указать, что поле не обязательно, передайте required=False в конструктор Field :

label ¶

label_suffix ¶

Аргумент label_suffix позволяет вам переопределить label_suffix формы на основе каждого поля:

initial ¶

Это нужно, когда вы хотите отобразить «пустую» форму, в которой поле инициализировано определенным значением. Например:

Вы можете подумать, почему бы просто не передать словарь начальных значений в качестве данных при отображении формы? Если вы сделаете это, то сработает валидация, и в HTML-вывод будут включены все ошибки валидации:

Именно поэтому значения initial отображаются только для несвязанных форм. Для связанных форм HTML-вывод будет использовать связанные данные.

Также обратите внимание, что значения initial не используются как «запасные» данные при валидации, если значение конкретного поля не задано. Значения initial предназначены только для начального отображения формы:

Вместо константы вы также можете передать любую вызываемую константу:

Вызываемый элемент будет оцениваться только при отображении несвязанной формы, а не при ее определении.

widget ¶

help_text ¶

error_messages ¶

Аргумент error_messages позволяет вам переопределить сообщения по умолчанию, которые будет выдавать поле. Передайте словарь с ключами, соответствующими сообщениям об ошибках, которые вы хотите отменить. Например, вот сообщение об ошибке по умолчанию:

Читайте также:  как аккуратно снять старые обои со стен

А вот пользовательское сообщение об ошибке:

В разделе built-in Field classes ниже каждый Field определяет ключи сообщения об ошибке, которые он использует.

validators ¶

Аргумент validators позволяет вам предоставить список функций валидации для этого поля.

localize ¶

Аргумент localize позволяет локализовать ввод данных формы, а также отображаемый вывод.

disabled ¶

Проверка, изменились ли данные поля¶

has_changed() ¶

Встроенные классы Field ¶

BooleanField ¶

CharField ¶

Имеет четыре необязательных аргумента для проверки:

Если эти аргументы указаны, они гарантируют, что строка имеет длину не более или не менее заданной.

Если True (по умолчанию), значение будет очищено от ведущих и последующих пробелов.

Значение, используемое для представления «пусто». По умолчанию это пустая строка.

ChoiceField ¶

Принимает один дополнительный аргумент:

Либо iterable 2-кортежей для использования в качестве вариантов для этого поля, enumeration вариантов, либо итерабель, возвращающая такую итерабель. Этот аргумент принимает те же форматы, что и аргумент choices для поля модели. См. model field reference documentation on choices для более подробной информации. Если аргумент является вызываемой переменной, он оценивается каждый раз при инициализации формы поля, а также во время рендеринга. По умолчанию используется пустой список.

TypedChoiceField ¶

Принимает дополнительные аргументы:

DateField ¶

Принимает один необязательный аргумент:

DateTimeField ¶

Принимает один необязательный аргумент:

Добавлена поддержка разбора строки даты ISO 8601 (включая опциональный часовой пояс).

DecimalField ¶

Принимает четыре необязательных аргумента:

Максимальное количество цифр (цифры до десятичной точки плюс цифры после десятичной точки, с вычеркнутыми ведущими нулями), допустимое в значении.

Максимально допустимое количество знаков после запятой.

DurationField ¶

EmailField ¶

FileField ¶

FilePathField ¶

Поле позволяет выбирать из файлов внутри определенного каталога. Оно принимает пять дополнительных аргументов; только path является обязательным:

Абсолютный путь к каталогу, содержимое которого вы хотите перечислить. Этот каталог должен существовать.

Шаблон регулярного выражения; только файлы с именами, совпадающими с этим выражением, будут допущены в качестве вариантов выбора.

FloatField ¶

ImageField ¶

IntegerField ¶

Принимает два необязательных аргумента для проверки:

Они управляют диапазоном значений, допустимых в поле.

JSONField ¶

Принимает два необязательных аргумента:

Подкласс :py >> для десериализации входных данных. Десериализация может потребовать учета того факта, что вы не можете быть уверены в типе входных данных. Например, вы рискуете вернуть >>, который на самом деле был строкой, которая просто оказалась в том же формате, который был выбран для >>s.

decoder может быть использовано для проверки ввода. Если во время десериализации возникнет :py >>, то возникнет >>.

Удобные для пользователя формы

JSONField в большинстве случаев не очень удобен для пользователя. Однако это полезный способ форматирования данных из виджета на стороне клиента для отправки на сервер.

GenericIPAddressField ¶

Поле, содержащее либо IPv4, либо IPv6-адрес.

Принимает два необязательных аргумента:

MultipleChoiceField ¶

TypedMultipleChoiceField ¶

NullBooleanField ¶

RegexField ¶

Принимает один необходимый аргумент:

Регулярное выражение, заданное либо как строка, либо как скомпилированный объект регулярного выражения.

SlugField ¶

Это поле предназначено для использования при представлении модели SlugField в формах.

Принимает два необязательных параметра:

Значение, используемое для представления «пусто». По умолчанию это пустая строка.

TimeField ¶

Принимает один необязательный аргумент:

URLField ¶

UUIDField ¶

Немного сложные встроенные Field классы¶

ComboField ¶

Принимает один дополнительный необходимый аргумент:

Список полей, которые должны быть использованы для проверки значения поля (в порядке их предоставления).

MultiValueField ¶

Агрегирует логику нескольких полей, которые вместе дают одно значение.

Принимает один дополнительный необходимый аргумент:

Также принимает некоторые необязательные аргументы:

Этот метод должен быть реализован в подклассах.

SplitDateTimeField ¶

Принимает два необязательных аргумента:

Поля, которые обрабатывают отношения¶

Для более сложного использования можно указать queryset=None при объявлении поля формы и затем заполнить queryset в методе __init__() формы:

ModelChoiceField ¶

Позволяет выбрать один объект модели, подходящий для представления внешнего ключа. Обратите внимание, что виджет по умолчанию ModelChoiceField становится непрактичным при увеличении количества записей. Вы должны избегать его использования для более чем 100 элементов.

Требуется один аргумент:

Объект модели QuerySet >, из которого берутся варианты выбора для поля и который используется для проверки выбора пользователя. Он оценивается при отображении формы.

ModelChoiceField также принимает два необязательных аргумента:

Источник

Поля формы ¶

Когда вы создаете 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 чтобы упростить вывод:

Читайте также:  джеймс бонд 2021 не время умирать актеры

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 ).

Источник

Развивающий портал