Django 受控交易块以延迟固定结束/犯罪//回滚

我有一个由交易手动控制的演示文稿功能,但当我使用装饰器时
@transaction.commit_manually

, django ALWAYS 调用以下异常。

正如您可以从代码中看到的那样 trace 下面,事务在从视图返回之前立即修复。

我用 sqlite, 如何 windows, 和 linux, 从 django 1.4.

以下是一个结论 django_trace, 应该在后面的例外。 明确:这发生了,无论我用我吗? django_trace 或者不是,当没有装饰者时,根本没有出现异常。 这不是由异常引起的 "swallowed".

请注意字符串 60 下面是在上下文处理器内,因此,犹豫不决
commit_manually

-wrapped.


01->mainapp.views:1321: transaction.commit//
01->mainapp.views:1322: return render_to_response/'mainapp/templates/incorporate.html',
01->mainapp.views:1323: RequestContext/request, form_params//
02-->mainapp.views:60: transaction.rollback_unless_managed//
02-->mainapp.views:61: return {'home_login_form': AuthenticationForm/request/}
Traceback /most recent call last/:
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__
return self.application/environ, start_response/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__
return self.application/environ, start_response/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\wsgi.py", line 241, in __call__
response = self.get_response/request/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 179, in get_response
response = self.handle_uncaught_exception/request, resolver, sys.exc_info///
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 221, in handle_uncaught_exception
return debug.technical_500_response/request, *exc_info/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 111, in get_response
response = callback/request, *callback_args, **callback_kwargs/
File "C:\Users\Marcin\Documents\oneclickcos\oneclickcos\mainapp\decorators.py", line 26, in _wrapped_view
return view_func/request, *args, **kwargs/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 209, in inner
return func/*args, **kwargs/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 203, in __exit__
self.exiting/exc_value, self.using/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 288, in exiting
leave_transaction_management/using=using/
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 52, in leave_transaction_management
connection.leave_transaction_management//
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\backends\__init__.py", line 119, in leave_transaction_management
raise TransactionManagementError/"Transaction managed block ended with "
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK


要清楚,我检查了关于这个主题的其他问题,他们没有解决我的问题。
已邀请:

裸奔

赞同来自:

事实证明,模板呈现是访问数据库的访问,因此通常的模板如:


return render_to_response/'mainapp/templates/incorporate.html',
RequestContext/request, form_params//


这是问题的原因。 我需要替换它:


retval = render_to_response/'mainapp/templates/incorporate.html',
RequestContext/request, form_params//
transaction.commit//
return retval


另外,其他答案 SO 显示交易控制装饰器

隐藏所有例外

而且导致排除交易管理。 不幸的是,最简单的诊断方法是在没有装饰器的情况下运行,看看是否发生异常,或者包装整个视图 try/except.

风见雨下

赞同来自:

裁判
https://docs.djangoproject.com ... ually
如果您的视图更改数据并且不包含 commit// 或者 rollback//, 那 Django 叫例外 TransactionManagementError.

因此,您在交易中有更改,并且您需要回滚或固定/犯罪/ 在最后退款之前。
transaction.rollback_unless_managed//

不起作用,因为里面的交易
commit_manually


受控

.

风见雨下

赞同来自:

我有这个问题,我决定了她,装饰上下文处理器
transaction.commit_on_success

, 例如


@transaction.commit_manually
def my_view/request/:
...
transaction.commit//
return render_to_response/"template.html", context_instance=RequestContext/request, my_ctx//


@transaction.commit_on_success
def my_context_processor/request/:
...


甚至读取数据库需要固定/犯罪//回滚 /包括在上下文处理器内部/
https://docs.djangoproject.com ... dling

要回复问题请先登录注册