2011-08-03 149 views
0

我创建一大堆的相互引用,像这样模型的对象:Django的推迟保存()模型对象的图形/事务创建模型

link = DirectorsIndividual(company = co, 
          individual = individual, 
          director = officer) 

coindividualofficer是未保存的模型对象。由于他们未保存,他们还没有ID,因此保存link将导致错误。

我想创建并保存所有的对象,或者都不是。有这样的标准模式吗?

我这样做是因为我关心“事务性”;尽量减少数据库访问显然也不错,但不是主要目标。

回答

1

如果您需要对事务进行完全控制,请使用commit_manually装饰器。它告诉Django你将自己管理交易。

如果您的视图更改了数据并且没有commit()或rollback(),Django将引发TransactionManagementError异常。

手册事务管理看起来是这样的:

from django.db import transaction 

@transaction.commit_manually 
def viewfunc(request): 
    ... 
    # You can commit/rollback however and whenever you want 
    transaction.commit() 
    ... 

    # But you've got to remember to do it yourself! 
    try: 
     ... 
    except: 
     transaction.rollback() 
    else: 
     transaction.commit() 
+0

我是在转换我的代码依靠thunks来延缓实例创建的中间。我的代码肯定不会那么复杂,而是以牺牲我的复杂性的自鸣得意为代价。 – Marcin