対応するビューに@transaction.commit_manually
デコレータがあるテンプレートで権限をチェックしようとすると、このエラーが発生します。Transaction managed block ended with pending COMMIT/ROLLBACK
Djangoトランザクション管理されたブロックがパーマネントのチェック時にCOMMIT/ROLLBACKを保留にして終了しました
テンプレート:
<!-- html stuff -->
{% if perms.myApp.add_table1 %}
{# show html elements #}
{% endif %}
私は許可条件を削除すると、エラーが存在しません。非許可関連のif
条件は大丈夫です。 {% if user.is_superuser %}{% endif %}
UPDATE:チェック権限がビューのレンダリングテンプレート上ではなく、から延長された場合でも、それはまだ、このエラーがあります。
nav_bar.htmlのパーミッションチェック、およびnav_bar.htmlを拡張するexpense.htmlのレンダリングで同じエラーが発生します。
view.py:
@transaction.commit_manually
def add_expense(request):
# do stuff here
私はデコレータを削除しようとしたといかなる種類の例外は、すべての作品はありません。しかし、私は上のデコレータを入れたときに、エラーが
urls.py発生します
# other stuff omitted
(r'^myApp/expenses/add/$', add_expense),
UPDATE#2:ユーザがスーパーユーザである場合には
を、何の問題にもありません。私はそれは、ユーザーが
@login_required()
@transaction.commit_manually
def add_expense(request):
request.session.set_expiry(1800)
if request.method == 'POST':
form_input = AddExpense(request.POST)
if form_input.is_valid():
try:
# after validation data is cleaned
cd = form_input.cleaned_data
# cleaned data is a dictionary
input_date = date.today()
user = request.user.username
new_record = table1.objects.create(
amount = cd['amount'],
date = cd['date_of_expense'],
username = user
)
new_record.save()
transaction.commit()
return render_to_response('forms/add_expense_success.html', context_instance=RequestContext(request))
except Exception, e:
pass
transaction.rollback()
return HttpResponse(None)
else:
return render_to_response('forms/add_expense.html', {'form': form_input},
context_instance=RequestContext(request))
else:
# loading this gives error, not sure the top part
form = AddExpense()
return render_to_response('forms/add_expense.html', {'form': form, 'page_title': '新增支出'},
context_instance=RequestContext(request))
ない答えはそれ自体が、ちょうどダブルチェック:あなたは「ここ#doのもの」のコードブロックの末尾にtransaction.commit()を持っていますか? – aychedee
それは条件の下にありますので、必ずしもそうではありません。しかし、私はこれが効果があるとは思わない。すべての条件に 'transaction.commit()' /'transaction.rollback()を追加すると、同じエラーが発生します。 –