【问题标题】:Django Aggregation Get Count of Users per Project ViewDjango 聚合获取每个项目视图的用户数
【发布时间】:2020-03-18 05:11:53
【问题描述】:

我有一个用于跟踪查看项目的用户的模型,它具有对用户和项目的外键引用。一个例子看起来像

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'))

【问题讨论】:

  • “项目”和“用户”是否属于同一模型?

标签: django django-models aggregation


【解决方案1】:

尝试做:

projects = ProjectViews.objects.annotate(view_count=Count('user')).values('id', 'view_count')

你应该得到的输出:

[{'id': 1, 'view_count': 3}, {'id': 2, 'view_count': 2}]

“id”是你的Projectid

【讨论】:

  • 谢谢,会试试这个,让你知道。我还需要获取其他值,这就是我使用“对象”的原因,但我认为我可以通过从“project__name”、“project__description”等多个值中选择多个值来解决它。
  • 这也给了我每个项目实例旁边的计数,而不是我需要的结果。
【解决方案2】:
projects = ProjectViews.objects.values('project').annotate(count=Count('user'))

这应该可以正常工作

【讨论】:

  • 这给了我每个项目实例旁边的计数。
【解决方案3】:

这对我有用:

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]

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

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2011-02-27
    • 2010-09-21
    • 1970-01-01
    • 2017-04-11
    相关资源
    最近更新 更多