如何清除Django中的表单数据
我创建了一个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来实现。