我的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'。
我认为它被称为'丢失更新'或其他东西。我认为在隔离级别'可序列化'不应该这样。
答案 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)