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表单启用自动提交模式?
答案 0 :(得分:2)
您误解了the documentation。
Django的默认行为是在自动提交模式下运行。
此处的“默认行为”是指“在缺乏有关交易范围的具体指导时的行为”。在您引用的changeform_view
中,该代码显式使用了事务API,表示它不想使用默认的自动提交模式。
请注意,所做的更改将无法确保代码在自动提交模式下运行。这是因为从_changeform_view
内部调用的任何函数本身都可能使用事务API,从而禁用了自动提交。 Django的许多部分都使用事务,因为它们对于确保正确的行为至关重要。
因此,没有设置或其他方法可以在整个Django中禁用事务API。