在__dict __之后,Django匹配查询不存在.copy()

时间:2014-11-22 00:11:04

标签: django django-models copy deep-copy

我制作模型对象的副本并将其分配给另一个对象模型。两种型号'属性是一样的。我这样做是为了保留对第一个记录的每个更改的历史副本。这是代码的简化版本:

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。

所以问题:这是为什么?它与操作系统有关吗?深度复制有替代方法吗?我担心它可能带来的性能影响。

0 个答案:

没有答案