【发布时间】:2011-05-21 15:24:59
【问题描述】:
是否可以从数据库中刷新 django 对象的状态?我的意思是行为大致相当于:
new_self = self.__class__.objects.get(pk=self.pk)
for each field of the record:
setattr(self, field, getattr(new_self, field))
更新: 在跟踪器中发现了重新打开/不会修复战争:http://code.djangoproject.com/ticket/901。 还是不明白为什么维护者不喜欢这个。
【问题讨论】:
-
在普通的 SQL 上下文中,这没有意义。只有在您的事务完成并执行
commmit之后 才能更改数据库对象。完成此操作后,您必须等待下一个 SQL 事务提交。为什么要这样做?下一笔交易要等多久? -
这似乎是一个不必要的功能;已经可以从数据库中重新查找对象。
-
我也想要这个,但是被反复关闭here
-
不合适,因为 Django 模型对象是代理。如果您将同一表行放入两个对象中 - x1 = X.objects.get(id=1); x2 = X.objects.get(id=1),它们将测试为相等但它们是不同的对象并且状态不共享。您可以独立更改并保存它们 - 最后一个保存的决定了数据库中行的状态。因此用简单的赋值重新加载是正确的 - x1 = X.objects.get(id=1)。使用 reload 方法会导致许多人错误地推断 x1.f = 'new value'; (x1.f == x2.f) 为真。
标签: python django django-models