我需要确保 Model1 和 Model2 都保存或都不保存,我很确定我应该能够在事务中执行此操作,但它似乎不起作用。
我不确定我是否了解交易如何正常工作。我认为该事务对于包装在装饰器中的整个函数调用都是有益的。
我也不确定这是否也只是一个 Sqlite 问题。
模型.py
from django.db import models
class Model1( models.Model ):
name = models.CharField( max_length = 20 )
number = models.IntegerField( )
class Model2( models.Model ):
name = models.CharField( max_length = 20 )
number = models.IntegerField( )
parent = models.ForeignKey( Model1 )
示例交易代码
from django.db import transaction
@transaction.commit_manually
def somefunction( name ):
try:
a = Model1.objects.get( name = name )
except Model1.DoesNotExist:
a = Model1( name = name )
try:
b = Mode2.objects.get( name = name)
except Model2.DoesNotExist:
b = Model2( name = name )
a.number = 3
b.number = 'a'
try:
a.save()
b.parent = a
b.save()
transaction.commit()
except:
transaction.rollback()
我没有尝试过 MySQL 或 Postgres,因为我实际上没有发现任何具体说 Sqlite 不能做到这一点的东西,所以只是想知道我做错了什么,或者它是否确实是 Sqlite3。