2017-05-15 50 views
2

约会拜访我有一个表,看起来像:Django的计数从日期时间字段为特定用户

+-------+---------+---------------------+-------------+-----------+-----------------+ 
    | 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。

+1

?你看过这个链接吗? http://stackoverflow.com/questions/8746014/django-group-by-date-day-month-year – Colwin

+0

我使用的是Django 1.11。在那里的答案似乎工作,除了'TruncDate'部分(返回一天None)。我用'RawSQL(DATE(visit_time))'代替它,它工作。谢谢。 –

回答

1

您需要您正在使用什么版本的Django的使用

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') 
+0

这个工程!谢谢! –

+0

为了清楚起见:不应该使用'visited = Count('user_id')'来计算访问次数吗? –

+0

我们正在计算行数,所以它可以使用ID。此外,如果此答案解决您的查询,请upvote并将其标记为接受:) –

相关问题