在Django 1.11更改视图中禁用原子事务

问题描述 投票:0回答:1

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表单的自动提交模式?

django django-forms django-views django-admin django-1.11
1个回答
2
投票

你误解了the documentation

Django的默认行为是在自动提交模式下运行。

“默认行为”在这里表示“在没有关于交易范围的具体指导的情况下的行为”。在您引用的changeform_view中,代码显式使用事务API,表明它不想使用默认的自动提交模式。

请注意,您的更改不会确保代码在自动提交模式下运行。这是因为在_changeform_view中调用的任何函数都可能自己使用事务API,从而禁用自动提交。许多Django使用事务,因为它们对于确保正确的行为至关重要。

所以没有设置或其他方法来禁用所有Django上的事务API。

© www.soinside.com 2019 - 2024. All rights reserved.