2016-11-04 3 views
1

私は訪問を表すクエリーセットを持っています。今では、一週間を通して一意の訪問をフィルタリングする必要があります。Django uniqe by querysetフィルタリング

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) 

1か月の範囲で1日の訪問数を取得するには、訪問数クエリーセットをフィルタリングする方法を教えてください。ユーザーが1日に4回訪れた場合、それは1回のユニークな訪問です。期待される結果は、先週の一意の訪問数を表す整数です。

答えて

2

以下は、モデルのcreated_atアトリビュートからの日付(時刻を取り除いた日付)であるvisit_dateと呼ばれるクエリーセットの新しいフィールドを作成します。 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クエリセットの意志はの線に沿って何かを探します:

[ 
    {'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} 
] 

クエリセット内の各アイテムは、特定のユーザーのその日付のユニークな訪問に関連しています。この例ではあなたはまた、visits_on_dateを見ることで、特定のユーザが行う訪問回数を決定するためにこれを使用することができます。5.

されるであろう

visits.count() 

:あなたはでユニーク訪問の数を決定することができますクエリーセットのフィールド。

+0

すごい!ありがとうございました。 – Goran