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
Django聚合获取每个项目视图的用户数_Django_Django Models_Aggregation - Fatal编程技术网

Django聚合获取每个项目视图的用户数

Django聚合获取每个项目视图的用户数,django,django-models,aggregation,Django,Django Models,Aggregation,我有一个跟踪用户查看项目的模型,它有用户和项目的外键引用。例如 project user 1 1 1 2 1 3 2 1 2 2 我想要实现的是每个项目的视图计数,因此在上面的示例中,项目1将是3,项目2将是2 我在下面尝试,但它计算每个用户实例,如何获得每个项目的每个用户实例 projects = ProjectViews.objects.all().annotate(view_count=Count('user'))

我有一个跟踪用户查看项目的模型,它有用户和项目的外键引用。例如

project user
1        1
1        2
1        3
2        1
2        2
我想要实现的是每个项目的视图计数,因此在上面的示例中,项目1将是3,项目2将是2

我在下面尝试,但它计算每个用户实例,如何获得每个项目的每个用户实例

projects = ProjectViews.objects.all().annotate(view_count=Count('user'))
试着做:

projects = ProjectViews.objects.annotate(view_count=Count('user')).values('id', 'view_count')
作为输出,您应该得到:

[{'id': 1, 'view_count': 3}, {'id': 2, 'view_count': 2}]
其中“id”是您的
项目
id

projects = ProjectViews.objects.values('project').annotate(count=Count('user'))

这应该很好

这对我来说很有效:

projects = ProjectViews.objects.values('project__id').annotate(view_count=Count('user__id',distinct=True)).values('view_count','project__id','project__name','project__owner__username','project__created','project__description').order_by("-view_count")[:10]

如果有人知道一种更好的方法来产生相同的结果,请告诉我。

项目和用户在同一个模型中吗?谢谢,我会尝试一下并告诉你。我还需要获得其他值,这就是我使用“对象”的原因,但我想我可以通过从“项目名称”、“项目描述”中选择多个值来解决它,例如,这也给了我每个项目实例旁边有一个计数,而不是我需要的结果。这给了我每个项目实例旁边有一个计数。