You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中统计特定游戏各星级评分的用户数量

实现特定游戏的评分统计功能

针对你的ActionGameReview模型,有几种高效的方式实现特定游戏的各星级评分用户数量统计,以下是具体方案:

方案一:使用Django ORM聚合+条件过滤(推荐)

这种方式通过一次数据库查询就能获取所有星级的统计数据,效率最优。如果需要统计唯一用户(避免同一用户多次评分重复计数),记得添加distinct=True。

from django.db.models import Count, Q

# 先获取目标游戏对象,这里以游戏名为"Template run"为例
target_game = ActionGame.objects.get(game_name="Template run")

# 统计各星级的用户数量
rating_stats = target_game.reviews.aggregate(
    star_1=Count('user', filter=Q(rating=1), distinct=True),
    star_2=Count('user', filter=Q(rating=2), distinct=True),
    star_3=Count('user', filter=Q(rating=3), distinct=True),
    star_4=Count('user', filter=Q(rating=4), distinct=True),
    star_5=Count('user', filter=Q(rating=5), distinct=True)
)

# 按示例格式输出结果
print(f"游戏:{target_game.game_name}")
print("评分")
print(f"1星:{rating_stats['star_1']}人,2星:{rating_stats['star_2']}人,3星:{rating_stats['star_3']}人,4星:{rating_stats['star_4']}人,5星:{rating_stats['star_5']}人")

如果不需要去重(统计所有评分记录数,而非用户数),去掉distinct=True即可。

方案二:分组统计后补全数据

通过分组查询获取已存在的星级统计,再补全1-5星的完整数据,适合需要灵活处理分组结果的场景:

from django.db.models import Count

target_game = ActionGame.objects.get(game_name="Template run")

# 按rating分组,统计每个星级的用户数(去重)
rating_counts = target_game.reviews.values('rating').annotate(user_count=Count('user', distinct=True)).order_by('rating')

# 初始化1-5星的统计字典,默认值为0
rating_stats = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0}
# 将查询结果填充到字典中
for item in rating_counts:
    rating_stats[item['rating']] = item['user_count']

# 输出结果
print(f"游戏:{target_game.game_name}")
print("评分")
print(f"1星:{rating_stats[1]}人,2星:{rating_stats[2]}人,3星:{rating_stats[3]}人,4星:{rating_stats[4]}人,5星:{rating_stats[5]}人")

注意事项

  • 如果你的业务允许用户对同一游戏多次评分,务必使用distinct=True来统计唯一用户数,否则会统计所有评分记录的数量。
  • 若目标游戏可能不存在,建议用get_object_or_404替代get,避免抛出DoesNotExist异常:
    from django.shortcuts import get_object_or_404
    target_game = get_object_or_404(ActionGame, game_name="Template run")
    

内容的提问来源于stack exchange,提问作者Byansi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:52:44