Django唯一的按日期查询集过滤



我有一个代表访问量的查询集,现在我需要按天过滤整个星期的唯一访问量。

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字段来确定特定用户的访问次数。

最新更新