Django 计算特定用户在日期时间字段中某个日期的访问次数
Posted
技术标签:
【中文标题】Django 计算特定用户在日期时间字段中某个日期的访问次数【英文标题】:Django count visits on a date from datetime field for a particular user 【发布时间】:2017-10-14 03:24:23 【问题描述】:我有一张桌子,看起来像:
+-------+---------+---------------------+-------------+-----------+-----------------+
| id | user_id | visit_time | action | user_type | erp_customer_id |
+-------+---------+---------------------+-------------+-----------+-----------------+
| 17460 | 818 | 2017-05-15 15:02:13 | NULL | customer | 932 |
| 17459 | 818 | 2017-05-15 15:02:11 | NULL | customer | 932 |
| 17458 | 818 | 2017-05-15 15:01:56 | NULL | customer | 932 |
| 17457 | 818 | 2017-05-15 15:01:55 | NULL | customer | 932 |
| 17456 | 818 | 2017-05-15 15:01:47 | NULL | customer | 932 |
| 17455 | 818 | 2017-05-15 15:01:15 | NULL | customer | 932 |
| 17454 | 818 | 2017-05-15 15:00:44 | NULL | customer | 932 |
| 17453 | 818 | 2017-05-15 14:59:58 | NULL | customer | 932 |
| 17452 | 818 | 2017-05-15 14:59:55 | NULL | customer | 932 |
| 17451 | 818 | 2017-05-15 14:59:55 | NULL | customer | 932 |
| 17450 | 818 | 2017-05-15 14:59:52 | NULL | customer | 932 |
| 17449 | 817 | 2017-05-15 14:55:46 | NULL | customer | 931 |
| 17448 | 817 | 2017-05-15 14:55:45 | NULL | customer | 931 |
| 17447 | 817 | 2017-05-15 14:53:55 | NULL | customer | 931 |
| 17446 | 817 | 2017-05-15 14:53:54 | NULL | customer | 931 |
| 17445 | 817 | 2017-05-15 14:53:26 | NULL | customer | 931 |
user_id
是外键,visit_time
是访问页面的时间戳。
这个想法是找到每个用户一天的访问次数。应该为每个用户每天返回一个单独的行。
所以它应该是这样的:
'user' : 818 , 'day' : 2017-05-15 , 'visits' : 12
'user' : 817 , 'day' : 2017-05-15 , 'visits' : 5
我正在尝试使用 Django ORM 构建查询。
这是模型定义:
class Log(models.Model):
class Meta:
db_table = "users_log"
managed = False
user = models.ForeignKey(LoginCustomer , db_column = "user_id")
customer = models.ForeignKey(Customer , db_column = "erp_customer_id")
visit_time = models.DateTimeField()
user_type = models.CharField(max_length = 25)
我已经能够从visit_time
中提取日期:
Log.objects.annotate(day = RawSQL('DATE(visit_time)',[]))
如何使用 Django ORM 获取所需数据?
使用的数据库是 mysql。
【问题讨论】:
您使用的是什么版本的 django?你看过这个链接吗? ***.com/questions/8746014/… 我使用的是 Django 1.11。除了TruncDate
部分(返回天为无)之外,那里的答案似乎有效。我改用RawSQL(DATE(visit_time))
,它起作用了。谢谢。
【参考方案1】:
你需要使用
from django.db.models import Count
from django.db.models.functions import TruncDay
Log.objects
.annotate(period=TruncDay('visit_time'))
.values('period', 'user_id')
.annotate(visits=Count('id'))
.values('period', 'visits')
【讨论】:
为了清楚起见:不应该用visits = Count('user_id')
来统计访问次数吗?
我们正在计算行数,因此可以使用 id。另外,如果此答案解决了您的问题,请投票并标记为已接受:)
知道了。谢谢!
另外,queryset.values()
返回不能在 django 模型管理中使用的字典实例。知道如何在管理员中使用此查询集的结果吗?以上是关于Django 计算特定用户在日期时间字段中某个日期的访问次数的主要内容,如果未能解决你的问题,请参考以下文章
Django Admin显示/隐藏字段如果在下拉菜单中选择了特定值