2012-02-18 119 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)) 

一切正常,但是當我的數據被保存在重定向不起作用,它總是返回到同一頁面。

+2

你爲什麼不使用'反向()'爲您重定向? – 2012-02-18 22:07:32

+1

這裏的問題不是交易,而是'重定向'這一行。請參閱下面的答案。順便說一句,你期望在你的嘗試中遇到什麼異常......除了塊?通常'transaction.commit_on_success'裝飾器就足夠了,這使得視圖更簡單。 – Alasdair 2012-02-18 23:06:37

回答

2

當您調用redirect函數時,您的視圖不會返回響應。因此,您的視圖將繼續,並在視圖結束時獲得默認響應。

你需要做的視圖中的以下內容:

return redirect("/inputs/listdelivriedsupplierrequest/")