Я пытаюсь установить для поля определенное значение после инициализации формы.
Например, у меня есть следующий класс.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
В представлении я хочу иметь возможность делать что-то вроде этого:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
ModelChoiceField
прежнему выдает invalid_choice, когда я даю емуinitial
значение :(form.data['Email'] = GetEmailString()
и он работаетform.fields['Email'].initial = GetEmailString()
form.fields['keyword'].initial
Если вы уже инициализировали форму, вы можете использовать начальное свойство поля. Например,
источник
Если вы
__init__
по какой-то причине хотите сделать это в методе формы , вы можете манипулироватьinitial
dict:источник
Что-то вроде Найджела Коэна будет работать, если вы добавляете данные в копию собранного набора данных формы:
источник
data[form.add_prefix('Email')]
следует учесть случаи, когда установлен префикс.form.data = form.data.copy()
modelform_factory
. Таким образом вы можете сгенерировать класс формы, в котором нет ненужных вам полей. Очень опасно иметь класс Form, у которого есть поля, которые не отображаются, поскольку объект формы все равно будет принимать данные для необработанных полей. Злоумышленник может использовать это в своих интересах.Если вы инициализировали такую форму
то правильный способ с января 2019 года - использовать
.initial
для замены данных. Это заменит данные вintial
dict, который идет вместе с формой. Это также работает, если вы инициализировали какой-либо экземпляр, напримерform = CustomForm(instance=instance)
Чтобы заменить данные в форме, вам необходимо
Обобщая это было бы,
источник
Просто измените поле Form.data:
источник
Добавим еще один способ: это тоже работает, но с немного более современной нотацией. Это просто работает вокруг того факта, что a
QueryDict
неизменяем.источник
в виджете используйте атрибут "значение". Пример:
источник
Другой способ сделать это, если вы уже инициализировали форму (с данными или без них) и вам необходимо добавить дополнительные данные перед их отображением:
источник