Python 是否覆盖Django模型的副本?
复制Django模型对象时,我总是希望它与我从中复制的源对象不具有相同的标识(即主键)。通常你会这样做:Python 是否覆盖Django模型的副本?,python,django,Python,Django,复制Django模型对象时,我总是希望它与我从中复制的源对象不具有相同的标识(即主键)。通常你会这样做: copy = copy.copy(source) copy.pk = None copy.save() class MyModel(Model): def __copy__(self): result = MyModel.__new__(MyModel) result.__dict__.update(self.__dict__) re
copy = copy.copy(source)
copy.pk = None
copy.save()
class MyModel(Model):
def __copy__(self):
result = MyModel.__new__(MyModel)
result.__dict__.update(self.__dict__)
result.pk = None
return result
但是我想让它自动的像这样:
copy = copy.copy(source)
copy.pk = None
copy.save()
class MyModel(Model):
def __copy__(self):
result = MyModel.__new__(MyModel)
result.__dict__.update(self.__dict__)
result.pk = None
return result
所以我现在可以做:
copy.copy(my_Model).save()
到目前为止,这似乎是可行的。但是,看看Django在\uuuu init\uuuuu
和\uuuu new\uuuuuu
中对模型对象所做的操作,我一直在想这是否确实是允许的,是否符合Django原则。令人惊讶的是,Django模型似乎没有覆盖\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。所以它不会与此冲突
此外,\uuu eq\uu
方法也通过pk
进行比较,因此这也不重要
长话短说,没有什么能阻止您重写\uuu copy\uu
,只要您确保pk
值在过程中发生更改。谢谢matsjoyce,我不知道。