Измените поле формы Django на скрытое поле
Я знаю, что могу установить атрибуты на поле с помощью:
И я могу установить желаемое начальное значение с помощью:
Однако это не изменит форму виджета.
6 ответов
Если у вас есть пользовательский шаблон и представление, вы можете исключить поле и использовать << modelform.instance.field >> для получения значения.
Также вы можете предпочесть использовать в представлении:
Но я не уверен, что это защитит метод сохранения на посту.
Надеюсь, это поможет.
Вариант, который работал для меня, определить поле в исходной форме как:
Затем, когда вы переопределите его в новом классе, он сохранит свое место.
Вы можете просто использовать css:
Это сделает поле и его метку невидимыми.
Это также может быть полезно: << form.field.as_hidden >>
Для нормальной формы вы можете сделать
Если у вас есть модель формы, вы можете сделать следующее
Вы также можете переопределить метод __init__
Во-первых, если вы не хотите, чтобы пользователь изменял данные, тогда кажется более понятным просто исключить поле. Включение его в качестве скрытого поля просто добавляет больше данных для отправки по проводам и предлагает злоумышленнику изменить его, когда вы этого не хотите. Если у вас есть веская причина включить поле, но скрыть его, вы можете передать ключевое слово arg в конструктор модели формы. Возможно, что-то вроде этого:
Тогда, на ваш взгляд:
Я предпочитаю такой подход к модификации внутренних элементов модели в представлении, но это вопрос вкуса.
Изменение поля формы django на скрытое поле
у меня есть форма django с RegexField (что очень похоже на обычное поле ввода текста). На мой взгляд, при определенных условиях я хочу скрыть это от пользователя, и пытается сохранить форму как можно более похожими.
что лучший / самый django-y / наименее хакерский способ сделать это поле поле?
5 ответов
Если у вас есть пользовательский шаблон и посмотреть можно исключить поле и использовать << modelform.instance.field >> чтобы получить значение.
также можно использовать в вид:
но я не уверен, что он защитит метод сохранения на post.
надеюсь, что это помогает.
это также может быть полезно: << form.field.as_hidden >>
во-первых, если вы не хотите, чтобы пользователь изменял данные, то кажется более чистым просто исключить поле. Включение его в качестве скрытого поля просто добавляет больше данных для отправки по проводу и приглашает вредоносного пользователя изменить его, когда вы этого не хотите. Если у вас есть веская причина включить поле, но скрыть его, вы можете передать ключевое слово arg конструктору modelform. Что-то вроде этого, возможно:
тогда, на ваш взгляд:
Я предпочитаю этот подход к изменению внутренних элементов модели в представлении, но это вопрос вкуса.
параметр, который работал для меня, определяет поле в исходной форме как:
затем, когда вы переопределите его в новом классе, он сохранит его место.
для нормальной формы вы можете сделать
если у вас есть форма модели, вы можете сделать следующее
вы также можете переопределить __init__ метод
Django скрыть поле формы
Добрый день, подскажите как реализовать данный функционал
Есть следующая модель class Account(models.Model): user_name = models.ForeignKey(User, related_name=’user_account’) key_id = models.IntegerField(max_length=10) v_code = models.CharField(max_length=64) account_name = models.IntegerField(max_length=10)
И есть форма созданная на основе этой модели class AddAccountForm (forms.ModelForm): class Meta: model = Account fields = (‘key_id’, ‘v_code’, ‘user_name’)
Мне необходимо чтобы поле user_name автоматически заполнялось данными о пользователе который в данный момент авторизован из request.user. И чтобы это поле было недоступно для редактирования в идеале чтобы оно было невидимо.
По этим данным в дальнейшей будет производиться валидация внесенных данных. Изначально думал данную проверку сделать отдельным методом обьекта Account, но тогда необходимо было сохранять обьект потом проводить проверку и если неверно удалять его. Поэтому на текущий момент думаю делать все проверки в форме по команде if AddAccountForm.is_valid():
При явном задании поля ‘user_name’ у меня в форме дает выбирать пользователя что в данном случае недопустимо. Читал маны и про скрытые поля так и не нашел информации.








Передавайте пользователя в конструктор формы, используйте эти данные при валидации и не нужно вам поле user_name, которое не видно и не редактируется.
Django. Как скрыть ненужные поля в форме в зависимости от выбранной категории?
Все привет. Мне нужно сделать так, чтобы при добавлении нового объявления, выбирая категорию, скрывались ненужные поля в форме. Понимаю, что это делается чере JS, но я пока плохо разбираюсь, поэтому прошу подсказать, если кто хорошо разбирается.
Например, я хочу, чтобы при выборе «Дома и участки» исчезал «Этаж»:
Вот моя главная модель:
Посмотрел в браузере структуру формы в шаблоне:
Структура поля, которое я хочу скрыть:
Попробовал сделать так, но пока не работает:
Если знаете, подскажите, пожалуйста, или пример какой, как это делается. Заранее, спасибо.
Как-то очень давно делал подобное, но для формы адреса. Брал идею с PayPal
https://www.ushanka.com/ вот на этом сайте, добавите товар в корзину и перейдете в саму корзину, далее «Pay with card». Но на этом сайте было критично только для USA, поэтому на все страны у меня настроена default форма, а USA специфичная.
Делается подобное через GET запрос к view которая на вход принимает параметр category (желательно строковый параметр slug), далее во view происходит import нужной Form из forms.py вашего приложения, в случае отсутствия специфичного класса под категорию, через исключение импортируете DefaultCategoryForm, таким же образом подтягиваете шаблон, можно использовать select_template(). Далее этот кусочек формы рендерите и вставляете в ваш HTML.
Но также нужно учесть что при валидации вам нужно подставлять нужную форму. Собрать ее лучше на лету через type().
В другом проекте более простом, я использовал betterforms. Там нужно создавать группы форм, а на атрибут class вешать например slug тех категорий полей которые нужно отображать для конкретной категории. Но этот вариант подойдет для не обязательных полей. То есть везде его использовать не получится
Django скрыть поле формы
Форма и поля допускают установку ряда параметров, которые позволяют частично кастомизировать отображение полей и формы. Тем не менее этого нередко бывает недостаточно. Например, необходимо применить стилизацию или добавить рядом с полем ввода какой-нибудь специальный текст. И Django позволяет нам коренным образом изменить всю композицию создаваемых полей.
form.название_поля.name : возвращает название поля
form.название_поля.value : возвращает значение поля, которое ему было передано по умолчанию
form.название_поля.label : возвращает текст метки, которая генерируется рядом с полем
form.название_поля.id_for_label : возвращает id для поля, которое по умолчанию создается по схеме id_имяполя.
form.название_поля.auto_id : возвращает id для поля, которое по умолчанию создается по схеме id_имяполя.
form.название_поля.label_tag : возвращает элемент label, который представляет метку рядом с полем
form.название_поля.help_text : возвращает текст подказки, ассоциированный с полем
form.название_поля.errors : возвращает ошибки валидации, связанные с полем
form.название_поля.css_classes : возвращает css-классы поля
form.название_поля.as_hidden : генерирует для поля разметку в виде скрытого поля
form.название_поля.is_hidden : возвращает True или False в зависимости от того, является ли поле скрытым
form.название_поля.as_text : генерирует для поля разметку в виде текстового поля
form.название_поля.as_textarea : генерирует для поля разметку в виде
form.название_поля.as_widget : возвращает виджет Django, ассоциированны с полем
Например, возмьмем простейшую форму:
В представлении передадим эут форму в шаблон:
И в шаблоне index.html пропишем использование полей формы:
Например, после отправки некорректных данных мы получим следующую веб-страницу:
Одно поле может содержать несколько ошибок. В этом случае можно использовать тег for для их последовательного вывода:

