2012-02-02 53 views
1

以下代碼位於Django信號中,當拷貝數爲'2'時,以下代碼創建80多個拷貝,然後崩潰......出了什麼問題?python deepcopy在post_save信號?

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) 

謝謝。

編輯:杜!發現這個問題,上面的代碼是Django信號的post_save操作的一部分,所以每個'save'都會觸發另一個循環,然後堆崩潰。

創建'n'對象並以編程方式將其保存在Django中的最佳方法是什麼?

回答

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 
+0

感謝您的回答。問題是這個'deepcopy'被放置在post_save信號中,並且克隆對象的每次保存都會導致遞歸。所以我簡單地在克隆前斷開信號並在操作後連接信號,一切正常。 – lud0h 2012-02-02 11:11:23