Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django uniqe按日期查询集筛选_Python_Django_Django Views_Django Queryset - Fatal编程技术网

Python Django uniqe按日期查询集筛选

Python Django uniqe按日期查询集筛选,python,django,django-views,django-queryset,Python,Django,Django Views,Django Queryset,我有一个代表访问的查询集,现在我需要按天筛选整个星期的唯一访问 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=we

我有一个代表访问的查询集,现在我需要按天筛选整个星期的唯一访问

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)

如何筛选访问量queryset以获得一周内每天的唯一访问量。所以,如果用户在一天内来4次,这是一次独特的访问。预期结果为整数,表示上周的唯一访问。

以下内容将在查询集中创建一个名为
访问日期的新字段:这是模型的
创建日期属性中的日期(除去时间)。使用
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'))
访问
查询集将显示以下内容:

[
    {'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}
]
queryset中的每个项目都与特定用户在该日期的唯一访问相关。您可以通过以下方式确定唯一访问的数量:

visits.count()
在这种情况下是5


您还可以通过查看queryset中的
visions\u on\u date
字段来确定特定用户的访问次数。

!谢谢。我很难得到这个答案,将datetime截短为一个日期,因此无法让它过滤不同的日期。如果希望从queryset中的对象获取datetimefield上存在的不同天数、周数或月数,则可能需要查看dates()