1

您好,我正在制作一个简单的表格。表单提交正常,但如果我刷新页面,它会重新提交数据。似乎表单在提交后保存了数据,我假设在提交后请求方法是发布的。问题是提交后清除 Django 表单的最佳方法是什么。提交后,表单变量不应再保留这些值。谢谢

def testimonials(request, template_name="testimonials.html"):
reviews = Reviews.objects.all()
if request.method == 'POST':
    form = forms.ReviewsForm(data = request.POST)
    # create a new item

    if form.is_valid(): # All validation rules pass
        # Process the data in form.cleaned_data
        # ...
        if form.is_valid():
            nameIn = form.cleaned_data['name']
            reviewIn = form.cleaned_data['review']
            newReview = Reviews(name = nameIn, review = reviewIn)
            newReview.save()
            return render_to_response(template_name, locals(), context_instance=RequestContext(request))

else:
    # This the the first page load, display a blank form
    form = forms.ReviewsForm()

    return render_to_response(template_name, locals(), context_instance=RequestContext(request))
4

3 回答 3

4

通常,您会在处理表单/POST 请求后发出重定向(这是避免您提到的重新提交问题的常见 Web 开发实践)。因此render_to_response,您可能会发出HttpResponseRedirect类似这样的命令,而不是 a :

if form.is_valid(): 
        # Process form as desired here
        # Simple example; use reverse() to avoid hard-coding URLs
        return HttpResponseRedirect('/success/')

查看using a form in view了解通常如何处理表单的框架。

于 2013-01-26T06:35:40.903 回答
1

使用反向而不是渲染来响应

 if form.is_valid():
        nameIn = form.cleaned_data['name']
        reviewIn = form.cleaned_data['review']
        newReview = Reviews(name = nameIn, review = reviewIn)
        newReview.save()
        return HttpResponseRedirect(reverse('app_name:url'))
于 2013-01-26T06:35:22.803 回答
0

您还可以使用“重定向”快捷方式:

from django.shortcuts import redirect

...
return redirect(newReview)

这是假设您在评论模型中定义了 get_absolute_url。

有关更多信息,请参阅文档

于 2013-01-26T07:01:49.867 回答