Django管理命令中的事务是如何管理的?
我想知道在Django的管理命令中,事务是怎么管理的。是保存时就提交吗?还是成功时才提交?我在官方文档里找不到相关的信息。
2 个回答
-1
我不太确定,但管理员表单在满足clean()的要求之前,是不会到达提交的阶段的。之后我想一切都会被提交。这种行为对于管理员的默认表单来说应该是足够的。不过,对于更复杂的表单,你可以创建自己的自定义管理员表单,我相信你可以决定是成功后提交,还是保存时提交。
5
管理命令的操作默认情况下不会被事务包裹,除非你特别告诉它。
你可以通过将output_transaction属性设置为True,来让handle()方法被事务包裹。根据文档的说明:
BaseCommand.output_transaction
这是一个布尔值,表示命令是否输出SQL语句;如果设置为True,输出会自动被包裹在BEGIN和COMMIT之间。默认值是False。
如果你想要更灵活的控制,可以自己手动启动事务:
...
def handle(self, *args, **options):
with transaction.atomic():
do_your_stuff()