在Django 1.11更改视图中禁用原子事务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Django 1.11更改视图中禁用原子事务相关的知识,希望对你有一定的参考价值。
Django 1.11有以下代码
@csrf_protect_m
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
with transaction.atomic(using=router.db_for_write(self.model)):
return self._changeform_view(request, object_id, form_url, extra_context)
在
env/lib/python3.6/site-packages/django/contrib/admin/options.py
根据doc,Django 1.11应该在自动提交模式下工作,但changeform_view似乎与文档不一致。 Django管理表单保存在事务中发生。
我通过覆盖模型的ModelAdmin类中的方法来解决。
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
return self._changeform_view(request, object_id, form_url, extra_context)
但有没有办法为所有具有设置的模型启用django表单的自动提交模式?
答案
你误解了the documentation。
Django的默认行为是在自动提交模式下运行。
“默认行为”在这里表示“在没有关于交易范围的具体指导的情况下的行为”。在您引用的changeform_view
中,代码显式使用事务API,表明它不想使用默认的自动提交模式。
请注意,您的更改不会确保代码在自动提交模式下运行。这是因为在_changeform_view
中调用的任何函数都可能自己使用事务API,从而禁用自动提交。许多Django使用事务,因为它们对于确保正确的行为至关重要。
所以没有设置或其他方法来禁用所有Django上的事务API。
以上是关于在Django 1.11更改视图中禁用原子事务的主要内容,如果未能解决你的问题,请参考以下文章