我对嵌套的Django Transactions感到有点困惑。
TransactionMiddleware
已启用,我将Django 1.5
与Postgres 9.1
一起使用。
如果我在代码中使用transaction.commit_on_success()
会怎样?由于TransactionMiddleware
,交易已经开启。
此代码块中的所有内容都在新事务中运行吗?外部交易保持不变并在之后继续?
提交外部事务,为额外代码块创建并提交新事务,然后启动第三个事务?
在离开代码块后,是否没有启动新事务并且当前是否已提交?
这是我的具体问题:
class User:
[..]
class Install:
user = ForeignKey(User)
install.user == user1 #given and True
install.user = user2
install.save()
user1.delete()
删除对象时,Django会删除所有指向此对象的外键对象,因此无意中删除了安装。
将install.save()
包裹在transaction.commit_on_success()
中保留安装吗?