2011-02-06 6 views
5

私はシンプルなフォームを持っています。送信すると成功ページにリダイレクトされます。django - POST後にリダイレクトするときの情報を渡します。

前の手順で送信したデータを、成功ページに使用したいと考えています。

私が知る限り、リダイレクト時にPOSTデータを渡すことはできません。どのようにこれを達成できますか?

現時点では、同じURLから成功ページを直接返すだけで済みますが、リフレッシュ時にデータの再送信が行われる恐れがあります。

request.sessionは唯一の方法ですか? ?

+0

(これはあなたが求めるものを終了しているので)あなたがどうなるの要求との間でデータを永続化することを可能にする任意のメカニズム。セッションはおそらく最もシンプルですが、唯一の方法ではありません。 –

答えて

7

次のことができます。 - [ID]

  1. は、データ(完全なデータまたはオブジェクトするだけのIDのいずれか)ますrequest.sessionでURLの中で何かのように、ID = [ID]と
  2. リダイレクトを渡しますあなたのオブジェクトを指します。

更新:PTについて

my_object = MyModel.objects.create(...) 
request.session['my_object_id'] = my_object.id 

それとも、オブジェクト全体を渡し試みることができる(それが動作するはずですが、私は100%確実ではないよ):1は、上記の、私はあなたが(POSTハンドラ内で)行うことができることを意味し

my_object = MyModel.objects.create(...) 
request.session['my_object'] = my_object 
+0

どのオブジェクトを参照していますか?評価できるPOSTデータを含むオブジェクトがどこかにありますか? – Acorn

+0

はい、それはrequest.POST.dataという名前です –

+0

しかし、リダイレクトすると、そのページはPOSTデータにアクセスできなくなりますか? – Acorn

8

私はこれを常に行います、セッションオブジェクトの必要はありません。これは非常に一般的なパターンPOST-redirect-GETです。通常、私がやっていることは次のとおりです。

  1. は、そのフォームに正常に投稿
  2. がデータを保存し、オブジェクトの詳細ビュー

へのリダイレクトを生成するデータをポストするオブジェクトリストとフォームとの見解を持っていますこうすることで、POST後に保存し、保存後にリダイレクトすることができます。 のモデルを仮定し

例ビュー、:

def all_thingies(request, **kwargs): 
    if request.POST: 
     form = ThingieForm(request.POST) 
     if form.is_valid(): 
      thingie = form.save() 
      return HttpResponseRedirect(thingie.get_absolute_url()) 
    else: 
     form = ThingieForm() 
    return object_list(request, 
         queryset = Thingie.objects.all().order_by('-id'), 
         template_name = 'app/thingie-list.html', 
         extra_context = { 'form': form }, 
         paginate_by = 10) 
+0

+1:Acornがオブジェクトの詳細ページにリダイレクトしたいと思ったかもしれません:-) –

+0

問題は、私のページがデータベースに送信していないことです。インターネットにメッセージを送信するので、リダイレクトする関連するページはありません。 – Acorn

+0

@Acornまあ、保存する代わりに、あなたの質問に記載されたsuccesページにリダイレクト –

関連する問題