2012-02-18 16 views
0

をリダイレクトしていない私は手動で自分のトランザクションを管理するには、このコードを使用します。Djangoのリダイレクトは、私はDjangoの取引に初心者です

@transaction.commit_manually 
@login_required 
def delivried_supplier_request(request): 
    if request.method == "POST": 
     if 'add_ligne' in request.POST: 
      cp = request.POST.copy() 
      cp['commande_fournisseur_ligne_set-TOTAL_FORMS'] = int(cp['commande_fournisseur_ligne_set-TOTAL_FORMS']) + 1 
      form = CommandeFournisseurForm(request.POST) 
      formset = DelivredCmdLigneFormSet(cp) 
      transaction.commit() 
     else: 
      form = CommandeFournisseurForm(request.POST) 
      formset = DelivredCmdLigneFormSet(request.POST) 
      if form.is_valid() and formset.is_valid(): 
       try: 
        cmdFournisseur = form.save() 
        instances = formset.save(commit=False) 
        for instance in instances: 
         instance.commande_fournisseur = cmdFournisseur 
         instance.save() 
        transaction.commit() 
        redirect("/inputs/listdelivriedsupplierrequest/") 
       except Exception, e: 
        print e 
        messages.add_message(request, messages.ERROR, e) 
        transaction.rollback() 
    else: 
     form = CommandeFournisseurForm() 
     formset = DelivredCmdLigneFormSet() 
     transaction.commit() 

    with transaction.commit_on_success(): 
     forms = [form] 
     return render_to_response("inputs/delivredsupplierrequest.html", { 
     "formset": formset, "forms": forms 
     }, context_instance=RequestContext(request)) 

すべてがOKですが、私のデータが保存されたときにリダイレクトが動作しない、それ常に同じページに戻ります。

+2

あなたは 'リバース()'あなたのリダイレクトのために使用されていないのはなぜ? –

+1

ここでの問題はトランザクションではなく、 'redirect'行です。下の私の答えを見てください。例外として、あなたのtry .. catchブロックで例外を捕まえることを期待している例外は何ですか?通常は 'transaction.commit_on_success'デコレータで十分です。これはビューをよりシンプルにします。 – Alasdair

答えて

2

redirect関数を呼び出すと、ビューから応答が返されません。したがって、ビューは継続され、ビューの最後にデフォルトのレスポンスが返されます。

あなたはあなたのビューで次の手順を実行する必要があります。

return redirect("/inputs/listdelivriedsupplierrequest/") 
関連する問題