重写Django模型中的 __copy__ 吗?

2024-03-29 05:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在复制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__)
        result.pk = None
        return result

所以我现在可以做:

copy.copy(my_Model).save()

到目前为止,这似乎是可行的。然而,看看Django对__init____new__中的模型对象做了什么,我一直想知道这是否确实是允许的,是否符合Django原则。令人惊讶的是,Django模型似乎没有覆盖__copy__。你知道吗


Tags: 对象django模型selfnonenewmodelsave
1条回答
网友
1楼 · 发布于 2024-03-29 05:29:59

正如您可以在Django source (^{})中找到的,Django只使用__hash__方法(它使用pk)来确定该方法的哈希值。所以它不会与此冲突。你知道吗

此外,__eq__方法也可以通过pk进行比较,因此这也无关紧要。你知道吗

长话短说,没有什么能阻止您重写__copy__,只要您确保pk值在这个过程中被更改。你知道吗

相关问题 更多 >