如何防止django中的读取不一致

时间:2014-07-28 13:57:06

标签: python django postgresql

我的django和postgresql有问题。

假设已经为某个模型加载了一个进程。

user = User.objects.get(pk=1)
#user.foo is '' right now
user.foo = 'bar'

虽然这个过程正在做另一个用这个表做的事情。

user = User.objects.get(pk=1)
#user.xyz is '' right now
user.xyz = 'xyz'

然后第一个保存,然后保存另一个。

最后我会有一个用户模型对象,其中foo =''和xyz ='xyz',而我希望foo等于'bar'。

我认为它被称为'丢失更新'或其他东西。我认为在隔离级别'可序列化'不应该这样。

1 个答案:

答案 0 :(得分:0)

Model.save用当前对象属性覆盖所有字段。

要仅覆盖所需的一个,您需要使用update_fields指定(自Django 1.5以来可用):

user = User.objects.get(pk=1)
user.foo = 'bar'
user.save(update_fields=['foo'])

# ---

user = User.objects.get(pk=1)
user.xyz = 'xyz'
user.save(update_fields=['xyz'])

请参阅Specifying which fields to save - Django documentation

顺便说一句,如果你没有在另一个进程中重新加载user个对象,你仍会看到foo = '', xyz = 'xyz'。重新加载它以查看更新的字段值。

user = User.objects.get(pk=user.pk)