在使用django开发自己的博客的时候,有一个就是统计每一片博文的访问次数。一开始是这样实现的:
def readArticle(req,article_id):
article = Article.objects.get(id=article_id)
article.read_time+=1 #read_time就是一片博文的访问次数
article.save()
return render(req,"article.html",{'post':article,'post_read_time':post_read_time})#把值传到模板中
后来越想越觉得不对。如果两个用户,在第一个用户访问,代码执行到article.save()之前,第二个用户开始访问了,这样,第一个用户的加一操作会被第二个用户的操作覆盖,这就是所谓的“丢失修改”问题。
后来查阅了很多文档,终于还是在Django的官方文档中发现了F表达式这个东西。这个东西就是用于代表参数中的属性的值。
官方文档如此介绍:
from django.db.models import F reporter = Reporters.objects.get