2016-11-04 167 views
1

我有一個查詢集代表訪問,現在我需要過濾一整天的獨特訪問。Django uniqe按日期查詢集過濾

class Visit(models.Model): 
    user = models.ForeignKey(User) 
    created_at = models.DateTimeField(auto_now_add=True) 


week = timezone.now().date() - timedelta(days=7) 
visits = Visit.objects.filter(created_at__gte=week) 

如何過濾訪問queryset以獲取每週範圍內每天的唯一訪問次數。所以如果用戶在一天內來過四次,這是一次獨特的訪問。預期結果是代表上週的唯一訪問的整數。

回答

2

以下將在查詢集中創建一個名爲visit_date的新字段:這是您的模型的created_at屬性的日期(已刪除時間)。使用Count功能,我們就可以組由用戶和日期,以及查詢集計數每個日期的訪問次數:

from django.db.models import Count 

week = timezone.now().date() - timedelta(days=7) 
visits = Visit.objects.filter(created_at__gte=week)).extra({'visit_date' : 'date(created_at)'}).values('user', 'visit_date').annotate(visits_on_date=Count('pk')) 

visits queryset的意志看起來沿着線的東西:

[ 
    {'user': 1, 'visit_date': datetime.date(2016, 11, 4), 'visits_on_date': 2}, 
    {'user': 2, 'visit_date': datetime.date(2016, 11, 4), 'visits_on_date': 5}, 
    {'user': 1, 'visit_date': datetime.date(2016, 11, 3), 'visits_on_date': 7}, 
    {'user': 2, 'visit_date': datetime.date(2016, 11, 3), 'visits_on_date': 9}, 
    {'user': 1, 'visit_date': datetime.date(2016, 11, 2), 'visits_on_date': 5} 
] 

queryset中的每個項目都與特定用戶對該日期的唯一訪問有關。您可以確定唯一訪問的次數:

visits.count() 

在這種情況下是5

您還可以使用它來確定訪問一個特定的用戶進行的數量,通過查看visits_on_date查詢集中的字段。

+0

令人驚歎!謝謝。 – Goran