gpt4 book ai didi

python - Django DB 模型 F 组合表达式

转载 作者:太空狗 更新时间:2023-10-29 22:25:44 24 4
gpt4 key购买 nike

In [1]: from django.db.models import F

In [2]: from forum.models import Post

In [3]: post = Post.objects.get(id=1)

In [4]: post.view_count = F('view_count') + 1

In [5]: post.save()

In [6]: post.view_count

Out[6]: <CombinedExpression: F(view_count) + Value(1)>

In [7]: post = Post.objects.get(id=1)

In [8]: post.view_count

Out[8]: 3

保存帖子后,返回组合表达式。

我想要确切的结果 (3)。

是否可以不再次调用 get 方法/refresh_from_db ?

最佳答案

在 Django 1.8+ 中,您可以使用 refresh_from_db方法。它不会保存任何 SQL 查询,但您可能会认为代码更好。

>>> post = Post.objects.get(id=1)
>>> post.view_count
2
>>> post.view_count = F('view_count') + 1
>>> post.save()
>>> post.refresh_from_db()
>>> post.view_count
3

由于更新发生在数据库中,如果不执行 get()refresh_from_db 就不可能在 Django 中获取新值(这两者都会导致类似的情况SQL 查询)。但是,可以通过使用 update() 来避免初始的 get()

>>> Post.objects.filter(id=1).update(view_count=F('view_count') + 1)
>>> post = Post.objects.get(id=1)
>>> post.view_count
3

关于python - Django DB 模型 F 组合表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672920/

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