如何清理表单中的数据并重新显示已清理的数据而不是提交的数据?
我的表单中有几个字段,每次用户提交时,都应该使用用户输入的值重新显示。但是,我想为用户清理和更新一些字段。更具体地说,我有一个字段FriendlyIntegerField(forms.CharField)
,我在其中覆盖to_python
,不仅可以调用int(str(value))
,还可以将任何负数设置为0等。我不想重新显示表单无效数据并让用户自己修复(Django希望我这样做)。
我在清理数据时没有问题并将其用于我的其余视图功能,但如何使用此数据更新实际表单?
顺便说一下,表单不反映我的数据模型中的结构,因此继承自Form
,而不是ModelForm
。
修改
My Field(在精简版中)看起来像这样:
class FriendlyIntegerField(forms.CharField):
def to_python(self, value):
try:
return str(int(str(value).replace(' ','')))
except:
raise forms.ValidationError('some error msg')
My Form(在精简版中)看起来像这样:
class SearchForm(forms.Form):
price_from = FriendlyIntegerField()
price_to = FriendlyIntegerField()
我的观点:
def search(request, key):
if request.method == 'POST':
form = SearchForm(request.REQUEST)
if not form.is_valid():
print "Form not valid"
else:
form = SearchForm()
return render_to_response('path_to_template', {'form' : form}
答案 0 :(得分:0)
如果在使用is_valid()
清除表单后,使用视图呈现清理后的表单,而不是重定向到新页面,则会在页面中看到已清理的数据。
(如果您希望用户看到此清理数据然后正确提交,您可以使用隐藏字段来跟踪表单数据是否已经清除,但这并非没有复杂性......)