当前位置:  开发笔记 > 编程语言 > 正文

在Django增加页面命中数

如何解决《在Django增加页面命中数》经验,为你挑选了1个好方法。

我有一个带IntegerField(hit_count)的表,当访问一个页面时(例如http://site/page/3),我希望hit_count数据库中的记录ID 3的列增加1.

查询应该像:

update table set hit_count = hit_count + 1 where id = 3

我可以使用标准的Django模型约定吗?或者我应该手动编写查询?



1> Carl Meyer..:

如果你使用Django 1.1+,只需使用F表达式:

from django.db.models import F
...
MyModel.objects.filter(id=...).update(hit_count=F('hit_count')+1)

这将执行单个原子数据库查询.

正如gerdemb所说,你应该考虑把它放在一个中间件中,以便它可以轻松重复使用,这样就不会让你的所有观点变得混乱.



@Jared因为.get()不是懒惰的(它实际上是在查询数据库).这就是为什么单个模型对象没有.update()方法的原因; 一旦你已经查询过,你只需使用.save().但是你失去了原子性,这就是这里的重点.原子更新的.update()方法仅在QuerySets上可用,并且只能因为它们是惰性的.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有