如何清除Django中的表单数据

1 投票
2 回答
2961 浏览
提问于 2025-04-17 23:47

我创建了一个django的form.py文件:

from django import forms
from models import ResumeModel


class ResumeForm(forms.ModelForm):
    username = forms.CharField(max_length = 200)
    first_name = forms.CharField(max_length = 200)
    last_name = forms.CharField(max_length = 200)
    fathers_name = forms.CharField(max_length = 200)
    email = forms.EmailField(required=True, label='Your e-mail address')
    message = forms.CharField(widget=forms.Textarea)
    class Meta():
        model = ResumeModel
        fields =('username','first_name','last_name','fathers_name','email','message')

views.py:

def save(request):
    if 'submit' in request.POST:
        form = ResumeForm(request.POST)
        if form.is_valid():
            form.save()
            form = ResumeForm()
            return render(request, '/success/', {'form': form})
    else:
        form = ResumeForm()
    args = {}
    args.update(csrf(request))
    args['form'] =form
    return render_to_response('create.html',args)

urls.py:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^save/', 'Resume.views.save'),
    url(r'^success/$', TemplateView.as_view(template_name='success.html')),
)

现在一切都正常。但是问题是,当我提交表单后,它会跳转到成功页面,而当我按返回按钮回到之前的页面,也就是/save/页面时,之前填写的所有值都会保留在输入框里。我想知道如何在按下返回按钮回到这个表单页面(网址是"/save/")时清空这些输入框。

2 个回答

1

这是浏览器内部的一个实现细节。你可以尝试用JavaScript来绕过这个问题,或者清除缓存等等。这个话题在这个StackOverflow问题中有讨论。

不过,更好的用户界面做法是使用AJAX来发送一个序列化的表单数据。如果你在你的view中成功验证并处理了这个表单(比如在你的简历模型表中插入一行新数据),那么你可以发送一个JSON响应,这样可以调用一些JavaScript来清空表单字段(可能使用.reset())。这样用户就可以很方便地提交另一个表单,如果这是他们的需求的话。

另外,建议在成功POST之后使用HttpResponseRedirect(目前你使用的是render()响应)。这样可以防止用户重复提交表单,避免在数据库中产生重复的记录等等。

1

这段话是关于浏览器的行为。浏览器会显示你之前访问过的页面,而不是重新加载一个新页面。

你可以通过使用JavaScript来解决这个问题。不过,遗憾的是,浏览器也不会再次运行这些JavaScript代码。

不过你可以试试:

$(window).bind("pageshow", function() {
  // Clean form values
});

使用jQuery来实现。

撰写回答