2016-11-04 5 views
1

Ich habe ein Abfrage-Set, die Besuche darstellen und jetzt muss ich eindeutige Besuche nach Tag für die ganze Woche filtern.Django uniqe nach Datum queryset Filterung

Wie kann ich Besuche Queryset filtern, um einmalige Besuche pro Tag für eine Woche Reichweite zu erhalten. Wenn der Benutzer 4 Mal an einem Tag kommt, ist es ein einmaliger Besuch. Das erwartete Ergebnis ist eine Ganzzahl, die für die letzte Woche eindeutige Besuche darstellt.

Antwort

2

Die folgende Tabelle erstellt ein neues Feld im Abfrage-Set namens visit_date: Das ist das Datum (ohne Zeitangabe) aus dem created_at Attribut Ihres Modells. die Count Funktion können wir die queryset durch den Benutzer und das Datum dann die Gruppe, und die Anzahl der Besuche pro Tag zählen:

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

Der visits queryset Willen etwas entlang der Linien von aussieht:

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

Jedes Element im Abfrage-Set bezieht sich auf einen eindeutigen Besuch für dieses Datum für einen bestimmten Benutzer. Sie können die Anzahl der eindeutigen Besuche bestimmen:

visits.count() 

die in diesem Fall wäre 5.

Sie können dies auch verwenden, um die Anzahl der Besuche ein bestimmte Benutzer macht, zu bestimmen, indem am visits_on_date suchen Feld im Abfrage-Set.

+0

Erstaunlich! Vielen Dank. – Goran