gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:59:00 25 4
gpt4 key购买 nike

我对 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'。

我认为它叫做“丢失的更新”之类的东西。我认为在隔离级别“可序列化”中不应该如此。

最佳答案

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)

关于python - 如何防止django中的读取不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com