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]
如果有人知道一种更好的方法来产生相同的结果,请告诉我。项目和用户在同一个模型中吗?谢谢,我会尝试一下并告诉你。我还需要获得其他值,这就是我使用“对象”的原因,但我想我可以通过从“项目名称”、“项目描述”中选择多个值来解决它,例如,这也给了我每个项目实例旁边有一个计数,而不是我需要的结果。这给了我每个项目实例旁边有一个计数。