Mut*_*vel 6 python database django model
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
Run Code Online (Sandbox Code Playgroud)
保存帖子后,它返回组合表达式.
我想要确切的结果(3).
是否可以不再调用get方法?
Ala*_*air 10
在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
Run Code Online (Sandbox Code Playgroud)
由于更新发生在数据库中,因此如果不执行a get()
或a refresh_from_db
(这两者都会导致类似的SQL查询),就无法在Django中获取新值.但是,可以get()
通过使用来避免初始化update()
.
>>> Post.objects.filter(id=1).update(view_count=F('view_count') + 1)
>>> post = Post.objects.get(id=1)
>>> post.view_count
3
Run Code Online (Sandbox Code Playgroud)
Nho*_*hor -4
你为什么不直接写post.view_count += 1
呢?