post_save信号中的Python深度复制?

时间:2012-02-02 08:40:20

标签: python django deep-copy django-signals

以下代码位于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中的最佳方法是什么?

1 个答案:

答案 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