如何强制清理字段并在Django中重新显示它?

时间:2010-10-24 21:17:41

标签: python django

如何清理表单中的数据并重新显示已清理的数据而不是提交的数据?

我的表单中有几个字段,每次用户提交时,都应该使用用户输入的值重新显示。但是,我想为用户清理和更新一些字段。更具体地说,我有一个字段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}

1 个答案:

答案 0 :(得分:0)

如果在使用is_valid()清除表单后,使用视图呈现清理后的表单,而不是重定向到新页面,则会在页面中看到已清理的数据。

(如果您希望用户看到此清理数据然后正确提交,您可以使用隐藏字段来跟踪表单数据是否已经清除,但这并非没有复杂性......)