如何在提交表单但验证失败后设置字段元素的值? e.g。
if form.is_valid():
form.save()
else:
form.data['my_field'] = 'some different data'
我真的不想把它放在视图中,而宁愿把它作为表单类的一部分。
由于
答案 0 :(得分:16)
如果您有一个绑定表单实例,并希望以某种方式更改数据,或者您想要将未绑定的Form实例绑定到某些数据,创建另一个表单实例。在Form实例中无法更改数据。创建Form实例后,您应该考虑其数据不可变,无论它是否有数据。
我真的不相信你的代码有效。但是没问题。根据文档,我会这样做:
if request.method == 'POST':
data = request.POST.copy()
form = MyForm(data)
if form.is_valid():
form.save()
else:
data['myField'] = 'some different data'
form = MyForm(initial=data)
答案 1 :(得分:6)
我最终做了
if request.method == 'POST':
new_data = request.POST.copy()
form = MyForm(data=new_data)
if form.is_valid():
form.save()
else:
new_data['myField'] = 'some different data'
希望这有助于某人
答案 2 :(得分:1)
你可以将它放在这样的表单类中:
class MyForm(forms.Form):
MY_VALUE = 'SOMETHING'
myfield = forms.CharField(
initial=MY_VALUE,
widget=forms.TextInput(attrs={'disabled': 'disabled'})
def __init__(self, *args, **kwargs):
# If the form has been submitted, populate the disabled field
if 'data' in kwargs:
data = kwargs['data'].copy()
self.prefix = kwargs.get('prefix')
data[self.add_prefix('myfield')] = MY_VALUE
kwargs['data'] = data
super(MyForm, self).__init__(*args, **kwargs)
它的工作方式是测试是否有任何数据传入表单构造函数。如果有,则复制它(未复制的数据是不可变的),然后在继续实例化表单之前放入初始值。