2012-02-02 2 views
1

다음 코드는 Django 신호에 있고 사본 수가 '2'이면 다음 코드는 80 개 이상의 복사본을 만든 다음 충돌합니다 ... 무엇이 잘못 되었습니까?post_save 신호에 파이썬 deepcopy가 있습니까?

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! 문제를 발견, 위의 코드는 장고 신호의 post_save 작업의 일부이므로 모든 '저장'이 다른 루프를 트리거 한 다음 충돌을 힙니다.

'n'개 개체를 만들고 장고에서 프로그래밍 방식으로 저장하는 가장 좋은 방법은 무엇입니까?

답변

1

이것은 내 테스트 코드로, 예상대로 수행됩니다. 문제가있는 곳을 찾기 위해 단위 테스트를해야한다고 생각합니다. 장고를 놔둬 라!

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 신호에 배치되었고 복제 객체의 모든 저장이 재귀가 발생했기 때문입니다. 그래서 간단히 복제 전 신호를 'disconnect'd하고 작동 후 신호를'connect'd하면 모든 것이 잘 작동합니다. – lud0h

관련 문제