我想克隆一个Django模型/对象。这是我的代码,其中包含一些调试语句(方法位于Item类中)
def duplicate_item(self):
print("original",self.id)
copy = self
copy.id = uuid.uuid4()
print("copy",copy.id)
copy.save()
print("What happened",self.id)
这是输出:
original 6a5a8d54-5b45-47fd-abf3-4357aa89dd0c
copy 5b6bfb5f-36b2-4a74-968e-c1f007df9056
what happened 5b6bfb5f-36b2-4a74-968e-c1f007df9056
为什么会这样?我对python浅/深复制逻辑了解不足,因此可能与它有关。谢谢
答案 0 :(得分:0)
正如@selcuk所说,在这里“您没有克隆任何东西” 。您可以使用此方法克隆对象。
注意:如果您的主键是
,则可以将此pk
id
更改为id
。
def duplicate_item(self):
old_data = self.__dict__
if 'pk' in old_data:
del old_data['pk']
if '_state' in old_data:
del old_data['_state']
new_object = self.__class__.objects.create(**old_data)
return new_object
但是您也可以使用pk/id
uuid.uuid4()
def duplicate_item(self):
old_data = self.__dict__
old_data['pk'] = uuid.uuid4() # new id
if '_state' in old_data:
del old_data['_state']
new_object = self.__class__.objects.create(**old_data)
return new_object