Django:查询是懒惰的&创建实例差异

时间:2010-12-12 17:54:46

标签: django

我正在尝试记录要发送到该类实例的creator的类模型对象的更改。

我创建了一个实用程序方法来区分这两个对象,但是,这不起作用,因为直到稍后才对查询进行求值:

goal = Goal.objects.get(pk=goal_id)
old_obj = goal

goal.description = "Some new string"
goal.save()

这不起作用,因为当我迭代模型类字段时,旧版本的值与更新版本上的值相同。

如何强制评估查询?

有许多不同类型的对象需要这样做,因此提取值的硬编码并不是真正可维护的。

有什么想法吗?

谢谢! :-) 埃里克

2 个答案:

答案 0 :(得分:1)

这与懒惰的查询无关,而是Python的赋值语义的简单结果。行old_obj = goal不会创建goal对象的副本,它只是将old_obj指定为指向同一对象的另一个名称。更改其中一个对象的属性将自动意味着另一个对象将看到更改。

这样做的一个简单方法就是向数据库询问另一个副本:

goal = Goal.objects.get(pk=goal_id)
old_obj = Goal.objects.get(pk=goal_id)

现在它们将是两个独立的对象,即使它们指向同一个数据库行,对一个对象的更改也不会影响另一个。

答案 1 :(得分:0)