以下代码位于Django信号中,当副本数为“2”时,以下代码会创建80+副本然后崩溃...出了什么问题?
def internal_signal(sender, instance, signal, created, *args, **kwargs):
for i in range(instance.number_of_copies):
item_copy = deepcopy(instance)
item_copy.id = item_copy.id + 1
item_copy.internal_barcode = "%s"%(item_copy.item_location.location_code)
item_copy.save()
post_save.connect(internal_signal, sender=Inventory)
感谢。
编辑:Duh!发现问题,上面的代码是Django信号的post_save操作的一部分,所以每次'save'都会触发另一个循环,然后堆崩溃。创建'n'对象并以编程方式将其保存在Django中的最佳方法是什么?
答案 0 :(得分:1)
这是我的测试代码,它按预期运行。 我认为你应该进行单元测试以找出问题所在。 让Django独自一人!
class T:
def save(this):
pass
from copy import deepcopy
from copy import copy
instance = T()
instance.number_of_copies = 2
instance.id = 1
instance.item_location=T()
instance.item_location.location_code = 2
for i in range(instance.number_of_copies):
item_copy = deepcopy(instance)
item_copy.id = item_copy.id + 1
item_copy.internal_barcode = "%s"%(item_copy.item_location.location_code)
item_copy.save()
print " id,code:",item_copy.id,item_copy.internal_barcode