我有一个对Django模型实例执行操作的函数,我正在尝试将它分解为可以独立使用的子操作。但是,这意味着我最终会在每次更改时调用.save
,并触发一个DB请求
def subop1(instance):
instance.a1 = 1
instance.save()
def subop1(instance):
instance.a2 = 2
instance.save()
def subop1(instance):
instance.a3 = 3
instance.save()
def main_op(instance):
subop1(instance) # triggers 1 DB request
subop2(instance) # triggers 1 DB request
subop3(instance) # triggers 1 DB request
有没有办法避免每次.save
触发DB请求,同时保持每个函数独立运行?也许可以采用某种方式将.save
操作推迟到某个上下文管理器退出,然后使用1db请求一次保存所有操作
我试图通读transaction
文档,但没有找到合适的
您可以向方法中添加可选参数,例如:
然后用
commit=False
调用实例,然后手动调用save()
你可以按以下方式做
方法1:
实例是相同的,因此可以执行以下操作:
之所以可以这样做,是因为实例是一个对象,它是通过引用而不是通过值传递的
因此,如果在函数中编辑实例,更改也会保留在该方法之外
方法2:
或者你可以这样做:
请注意但是,这不是最好的方法,因为垃圾收集器可能会删除实例,因此只有在确定对象始终保持全局的情况下,才使用此方法
否则,必须将此方法添加到对象类
注意第2部分 在这种情况下,您的项目将保存每当您处置它。 因此,如果你不主动保存对象,它无论如何都会被保存
所以最后最好的方法是在数据库上做更多的事务。
相关问题 更多 >
编程相关推荐