Django установить значение поля после инициализации формы
Я пытаюсь установить в поле определенное значение после инициализации формы.
например, у меня есть следующий класс.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
в представлении, я хочу быть в состоянии сделать что-то вроде этого:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
6 ответов:
поскольку вы не передаете данные POST, Я предполагаю, что вы пытаетесь установить начальное значение, которое будет отображаться в форме. То, как вы делаете это с
initialключевое слово.form = CustomForm(initial={'Email': GetEmailString()})посмотреть Django Form docs для более подробного объяснения.
если вы пытаетесь изменить значение после отправки формы, вы можете использовать что-то вроде:
if form.is_valid(): form.cleaned_data['Email'] = GetEmailString()проверьте указанные выше документы для получения дополнительной информации об использовании
cleaned_data
Если вы уже инициализировали форму, вы можете использовать начальное свойство поля. Например,
form = CustomForm() form.fields["Email"].initial = GetEmailString()
что-то вроде Найджела Коэна будет работать, если вы добавляете данные в скопировать из собранного набора данных формы:
form = FormType(request.POST) if request.method == "POST": formcopy = form(request.POST.copy()) formcopy.data['Email'] = GetEmailString()
Если вы хотите сделать это в форме
__init__метод по какой-то причине, вы можете манипулироватьinitialдикт:class MyForm(forms.Form): my_field = forms.CharField(max_length=255) def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.initial['my_field'] = 'Initial value'
просто измените свою форму.поле данных:
class ChooseProjectForm(forms.Form): project = forms.ModelChoiceField(queryset=project_qs) my_projects = forms.BooleanField() def __init__(self, *args, **kwargs): super(ChooseProjectForm, self).__init__(*args, **kwargs) self.data = self.data.copy() # IMPORTANT, self.data is immutable # any condition: if self.data.get('my_projects'): my_projects = self.fields['project'].queryset.filter(my=True) self.fields['project'].queryset = my_projects self.fields['project'].initial = my_projects.first().pk self.fields['project'].empty_label = None # disable "-----" self.data.update(project=my_projects.first().pk) # Update Form data self.fields['project'].widget = forms.HiddenInput() # Hide if you want
другой способ сделать это, если вы уже инициализировали форму (с данными или без данных), и вам нужно добавить дополнительные данные перед отображением:
form.data['Email] = GetEmailString()
Comments