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
保存post后,它返回组合表达式。在
我要确切的结果(3)。在
是否可以不从数据库再次调用get方法/refresh_?在
在django1.8+中,可以使用^{} 方法。它不会保存任何SQL查询,但您可能认为代码更好。在
由于更新发生在数据库中,所以不执行
^{pr2}$get()
或refresh_from_db
(这两个操作都会导致类似的SQL查询)就不可能在Django中获得新值。但是,可以通过使用update()
来避免初始的get()
。在从文档https://docs.djangoproject.com/en/1.7/ref/models/queries/#f-expressions
Python从不了解封装的SQL表达式
post.view_count = F('view_count') + 1 # F('view_count') Django sql expression
。在它完全由数据库处理。在
因此,当Python知道所应用的表达式而不是结果时,对数据库所做的更改。在
你可以这样做直接:-在
你为什么不直接写
post.view_count += 1
?在相关问题 更多 >
编程相关推荐