我有一个代表访问的查询集,现在我需要按天过滤所有星期的唯一访问次数。
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次,那么这是一次独特的访问。预期结果为整数,表示上周的唯一访问次数。
答案 0 :(得分:2)
下面将在查询集中创建一个名为has_sub_menu
的新字段:即模型的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}
]
在这个例子中将是5.
您还可以通过查看查询集中的visits.count()
字段来确定特定用户的访问次数。