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ですが、私のデータが保存されたときにリダイレクトが動作しない、それ常に同じページに戻ります。
あなたは 'リバース()'あなたのリダイレクトのために使用されていないのはなぜ? –
ここでの問題はトランザクションではなく、 'redirect'行です。下の私の答えを見てください。例外として、あなたのtry .. catchブロックで例外を捕まえることを期待している例外は何ですか?通常は 'transaction.commit_on_success'デコレータで十分です。これはビューをよりシンプルにします。 – Alasdair