我有一个代表访问量的查询集,现在我需要按天过滤整个星期的唯一访问量。
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)
我如何过滤访问量查询集以获得一周范围内每天的唯一访问量?所以如果用户在一天内访问了4次,那就是一次独立访问。预期结果为整数,表示上周的唯一访问次数
下面将在查询集中创建一个名为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
字段来确定特定用户的访问次数。