Python Django统计特定用户在date from datetime字段上的访问次数
我有一张桌子,看起来像:Python Django统计特定用户在date from datetime字段上的访问次数,python,mysql,django,django-orm,Python,Mysql,Django,Django Orm,我有一张桌子,看起来像: +-------+---------+---------------------+-------------+-----------+-----------------+ | id | user_id | visit_time | action | user_type | erp_customer_id | +-------+---------+---------------------+-------------+
+-------+---------+---------------------+-------------+-----------+-----------------+
| 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\u id
是外键,visit\u 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)
我已经能够使用以下工具从访问时间中提取日期:
Log.objects.annotate(day = RawSQL('DATE(visit_time)',[]))
如何使用Django ORM获得所需的数据
正在使用的数据库是MySQL。您需要使用
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')
您使用的是什么版本的django?你看到这个链接了吗?我正在使用Django 1.11。除了TruncDate
部分(返回日期为无)之外,这里的答案似乎有效。我改用了RawSQL(日期(访问时间))
,它成功了。谢谢。为了清楚起见:不应该用visions=Count('user\u id')
来计算访问次数吗?我们正在计算行数,所以可以使用id。此外,如果这个答案解决了您的问题,请向上投票并将其标记为接受:)明白。谢谢另外,queryset.values()
返回django模型管理中无法使用的字典实例。你知道我如何在管理中使用这个查询集的结果吗?