我试图在初始化表单后将字段设置为某个值.
例如,我有以下课程.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
Run Code Online (Sandbox Code Playgroud)
在视图中,我希望能够做到这样的事情:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
Run Code Online (Sandbox Code Playgroud)
Gra*_*ant 123
由于您没有传递POST数据,我将假设您要执行的操作是设置将在表单中显示的初始值.你这样做的方法是使用initial
关键字.
form = CustomForm(initial={'Email': GetEmailString()})
Run Code Online (Sandbox Code Playgroud)
有关更多说明,请参阅Django表单文档.
如果您在提交表单后尝试更改值,则可以使用以下内容:
if form.is_valid():
form.cleaned_data['Email'] = GetEmailString()
Run Code Online (Sandbox Code Playgroud)
有关使用的更多信息,请查看上面引用的文档 cleaned_data
Jos*_*osh 88
如果您已经初始化了表单,则可以使用该字段的初始属性.例如,
form = CustomForm()
form.fields["Email"].initial = GetEmailString()
Run Code Online (Sandbox Code Playgroud)
如果__init__
由于某种原因想在表单的方法中执行它,可以操作initial
dict:
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'
Run Code Online (Sandbox Code Playgroud)
如果你已经像这样初始化了表单
form = CustomForm()
Run Code Online (Sandbox Code Playgroud)
那么截至2019 年 1 月的正确方法是使用.initial
替换数据。这将替换intial
与表单一起使用的字典中的数据。如果您使用某些实例进行初始化,它也可以工作,例如 form = CustomForm(instance=instance)
要替换表单中的数据,您需要
form.initial['Email'] = GetEmailString()
Run Code Online (Sandbox Code Playgroud)
概括这将是,
form.initial['field_name'] = new_value
Run Code Online (Sandbox Code Playgroud)
如果您要将数据添加到收集的表单数据集的副本中,那么像Nigel Cohen这样的东西会起作用:
form = FormType(request.POST)
if request.method == "POST":
formcopy = form(request.POST.copy())
formcopy.data['Email'] = GetEmailString()
Run Code Online (Sandbox Code Playgroud)
小智 6
只需更改您的 Form.data 字段:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
115354 次 |
最近记录: |