У меня есть форма Django с RegexField
, которая очень похожа на обычное поле ввода текста.
На мой взгляд, при определенных условиях я хочу скрыть это от пользователя и стараюсь сохранить форму как можно более похожей. Как лучше всего превратить это поле в HiddenInput
поле?
Я знаю, что могу установить атрибуты в поле с помощью:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
И я могу установить желаемое начальное значение с помощью:
form.initial['fieldname'] = 'mydesiredvalue'
Однако это не изменит форму виджета.
Какой самый лучший / самый "django-y" / наименее "хакерский" способ сделать это поле <input type="hidden">
полем?
источник
"" is not a valid value for a primary key.
После использования этого решения я получаю a в методе is_valid.from django import forms
hidden_field_name = forms.CharField(label='reset', max_length=256, widget=forms.HiddenInput())
версии 1.7 используйте этот синтаксис: где ключ - это новый синтаксис виджета в конце. Настройте под свои нужды.Это также может быть полезно:
{{ form.field.as_hidden }}
источник
вариант, который сработал для меня, определите поле в исходной форме как:
тогда, когда вы переопределите его в новом классе, он сохранит свое место.
источник
Во-первых, если вы не хотите, чтобы пользователь изменял данные, то будет проще просто исключить поле. Включение его в качестве скрытого поля просто добавляет больше данных для отправки по сети и предлагает злоумышленнику изменить его, когда вы этого не хотите. Если у вас есть веская причина включить поле, но скрыть его, вы можете передать ключевое слово arg в конструктор модели. Возможно что-то вроде этого:
Тогда, на ваш взгляд:
Я предпочитаю этот подход к изменению внутренних компонентов modelform в представлении, но это дело вкуса.
источник
class Meta: exclude = ["fieldname"]
. Проблема здесь в том, что мета-подход «статичен», но мне нужно что-то динамическое. См stackoverflow.com/questions/20243735/...Для нормальной формы вы можете сделать
Если у вас есть модельная форма, вы можете сделать следующее
Вы также можете переопределить
__init__
методисточник
Если вы хотите, чтобы поле всегда было скрыто, используйте следующее:
источник
Вы можете просто использовать css:
Это сделает поле и его метку невидимыми.
источник