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

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

フォームが通常どのように処理されるかのスケルトンについては、フォームの使用を確認してください。

于 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 に答える