【发布时间】:2010-10-24 21:17:41
【问题描述】:
如何清理表单中的数据并重新显示清理后的数据而不是提交的数据?
我的表单中有几个字段,每次用户提交它时,它都应该重新显示用户输入的值。但是,我想为用户清理和更新一些字段。更具体地说,我有一个字段FriendlyIntegerField(forms.CharField),在该字段中我覆盖to_python,不仅调用int(str(value)),而且还将任何负数设置为0等。我不想重新显示包含无效数据的表单并拥有用户自己修复它(这就是 Django 希望我这样做的方式)。
我没有问题清理数据并将其用于我的视图功能的其余部分,但是如何使用这些数据更新实际表单?
顺便说一句,表单不反映我的数据模型中的结构,因此继承自 Form,而不是 ModelForm。
编辑:
我的字段(精简版)如下所示:
class FriendlyIntegerField(forms.CharField):
def to_python(self, value):
try:
return str(int(str(value).replace(' ','')))
except:
raise forms.ValidationError('some error msg')
我的表单(精简版)如下所示:
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}
【问题讨论】:
-
附带说明,您应该注意这一点。我不记得我在哪里读过它,但显然改变用户输入的值可能会让最终用户感到困惑。简单地告诉他们不允许负值并重新显示他们的(错误的)输入可以证明比您想象的更加用户友好。
-
我绝对同意 LaundroMat。默默地改变用户输入通常不是一个好主意。负数可能不是最好的例子,我可能会在最终版本中跳过它。但是,我确实想删除数字中的空格。该字段代表价格,我认为将“250 000”自动更改为“250000”是个好主意。