0

ユーザーが特定の製品のレビューを追加できるようにする次のビューがあります。ユーザーがフォームを送信すると、データベースにデータが追加され、/view_reviews.htmlに移動します。ただし、ページを更新すると、同じレビューが再度追加されます。ユーザーがたまたまページを更新した場合でも、レビューが1回だけ追加されるようにするにはどうすればよいですか?

def add_review(request, product_id):
    if request.method == 'POST':
        form = ReviewForm(request.POST)
        if form.is_valid():
            form.save()
            product = get_object_or_404(Product, pk=product_id)
            reviews = Review.objects.filter(product_id=product_id)
            return render(request,'reserve/templates/view_reviews.html',{'form': form, 'product':product, 'reviews':reviews})
    else:
        form = ReviewForm()
    variables = RequestContext(request, {'form': form})
    return render_to_response('reserve/templates/create_review.html', variables)
4

1 に答える 1

3

POST内のデータのみを変更する必要があり、リクエストが成功すると、ページにリダイレクトされます。このように、リロードすると、データを変更したPOSTではなく、ページ自体のみがリロードされます。

したがって、の代わりにreturn render(...)、する必要がありますreturn HttpReponseRedirect(...)

これには、コードを複製する必要がないという利点もあります。あなたの例の後form.save()に、あなたは実際にはあなたがすでにどこかに持っている単なるビューである3つの線を持っています。

于 2012-06-25T00:21:10.607 に答える