每当我试图检查模板中的权限时,它对应的视图有一个@transaction.commit_manually
修饰符,就会出现这个错误Transaction managed block ended with pending COMMIT/ROLLBACK
。在
模板:
<!-- html stuff -->
{% if perms.myApp.add_table1 %}
{# show html elements #}
{% endif %}
删除权限条件后,不会出现任何错误。与非权限相关的if
条件正常,例如{% if user.is_superuser %}{% endif %}
更新:即使权限检查不在视图呈现的模板上,而是从中扩展的,它仍然会有此错误。在
例如,nav中的权限检查_工具栏.html,并查看渲染费用.html扩展了导航_工具栏.html会导致同样的错误。在
在视图.py公司名称:
^{pr2}$我试过把装饰工拆了,没有任何例外,一切都可以。但是当我装上装饰器时,错误就发生了
在网址.py公司名称:
# other stuff omitted
(r'^myApp/expenses/add/$', add_expense),
更新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))
我在尝试减少访问用户的权限时收到此错误消息。在
如果以超级用户(管理员角色)身份运行完全没有问题,如果以用户(用户角色)身份运行,则出现错误。 用户对所有与django相关的表,甚至对数据库和模式也拥有所有(甚至是授予)权限,但它仍然会给出错误。在
是什么原因造成的?到目前为止,我可以调试这个,它只是超级用户权限缺失,否则超级用户和用户拥有相同的权限。在
代码:
为了确认错误信息的含义,你在Postgres上,对吗?在
如果是这样的话,有一个建议:在上面的
# do stuff here
块中,我敢打赌,即使是在写之后,也不会在读后手动提交。在从django1.3开始,事务管理的读取被视为脏的——而不仅仅是写操作——所以您也需要在这些读操作之后
commit()
。在有关详细信息,请参阅release notes。在
它由context引起,instance=RequestContext(request)
看看下面@Marcin的解决方案
Django Transaction managed block ended with pending COMMIT/ROLLBACK
相关问题 更多 >
编程相关推荐