2017-05-15 74 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並將其標記爲接受:) –

相關問題