下面将在查询集中创建一个名为 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 查询集看起来类似于:
[
{'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.count()
在本例中为 5。
您还可以通过查看查询集中的 visits_on_date 字段来确定特定用户的访问次数。