根据我的测试,我知道默认情况下,在Django Admin中添加、更改和删除数据时会使用事务。
但是,我选择了删除选定的人并点击了Django管理员操作中的Go。* 我使用PostgreSQL:
然后,点击是,我确定删除数据:
现在,只有一个查询DELETE
运行,而没有包括BEGIN
和COMMIT
之间的一个或多个其他查询,如下所示,所以我怀疑默认情况下,事务是否在Django管理操作中使用。* 以下是PostgreSQL查询日志,您可以检查如何记录PostgreSQL查询:
那么默认情况下,事务是否在Django管理操作中使用?
1条答案
按热度按时间qco9c6ql1#
不,默认情况下,事务不用于Django管理操作。
首先,您可以看到
@transaction.atomic
或with transaction.atomic():
没有用于下面的默认delete_queryset():其次,如果您将select_for_update()代码添加到
delete_queryset()
,方法是覆盖它,如下所示:然后,选择删除选定的人并点击Django管理员操作中的Go:
然后,点击是,我确定删除数据:
您将得到下面的错误,因为
select_for_update()
需要与transaction一起使用,这意味着 * 默认情况下,transaction不用于Django管理操作*:django.db.transaction.transactionManagementError:数据库事务管理错误:select_for_update不能在事务之外使用。