我制作模型对象的副本并将其分配给另一个对象模型。两种型号'属性是一样的。我这样做是为了保留对第一个记录的每个更改的历史副本。这是代码的简化版本:
hm = HistoricModel()
hm.__dict__ = obj.__dict__.copy()
hm.save()
为了处理对象的历史关系,我重写了历史对象的save方法并更新了关系字段:
def save(self, *args, **kwargs):
self.relation = HistoricRelation.objects.filter(id=self.relation.id).latest()
super(HistoricModel, self).save(*args, **kwargs)
运行我得到的代码(有时候!):
HistoricRelation matching query does not exist.
经过多次调试后如果意识到错误来自
self.relation.id
如果我反复制作对象的深层副本:
hm.__dict__ = copy.deepcopy(obj.__dict__)
然后它有效!
我在AWS Linux服务器中有简单的复制版本(如开头所示),它运行正常。但是,在我的Windows 8.1笔记本电脑中,它并没有。我在两个地方都使用Python 2.7和Django 1.6。
所以问题:这是为什么?它与操作系统有关吗?深度复制有替代方法吗?我担心它可能带来的性能影响。