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

如何统计电商平台卖家所有产品的总评论数与平均评分?

问题描述

我正在搭建一个电商网站,该网站设有商家账户系统。每位商家可上传商品图片及完整售卖信息,且可售卖不同类型的商品。买家可对购买的商品进行评价。我需要展示卖家所有商品收到的买家反馈总数及平均评分,示例如下:
seller-1: 10 reviews, 4.5 star,seller-2: 5 reviews, 4.8 star,seller-3: 11 reviews, 4.1 star。

基于以下models.py代码,请问该如何实现?

class Products(models.Model):
    user = models.ForeignKey(User, related_name="merchandise_product_related_name", on_delete=models.CASCADE, blank=True, null=True)
    product_title = models.CharField(blank=True, null=True, max_length = 250)
    brand = models.CharField(max_length=250, blank=True, null=True)
    product_desc = RichTextField(blank=True, null=True)


class ProductREVIEWS(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='userREVIEW',on_delete=models.CASCADE)
    product = models.ForeignKey(Products, related_name='productREVIEWrelatedNAME',on_delete=models.CASCADE)
    feedBACK = models.TextField(blank=True, null=True)
    rating = models.IntegerField(blank=True, null=True)
实现方案

可以通过Django的聚合查询(annotate)快速实现需求,具体步骤如下:

1. 视图层编写统计逻辑

在视图函数或类视图中,关联用户、商品、评价三个模型,聚合计算每个卖家的总评价数和平均评分:

from django.db.models import Count, Avg
from django.contrib.auth.models import User
from .models import Products, ProductREVIEWS

def seller_review_stats(request):
    # 聚合每个卖家的评价数据
    sellers_stats = User.objects.annotate(
        total_reviews=Count('merchandise_product_related_name__productREVIEWrelatedNAME'),
        average_rating=Avg('merchandise_product_related_name__productREVIEWrelatedNAME__rating')
    ).filter(total_reviews__gt=0)  # 可选:仅显示有评价的卖家

    # 对平均分保留一位小数,优化展示效果
    for seller in sellers_stats:
        if seller.average_rating:
            seller.average_rating = round(seller.average_rating, 1)

    return render(request, 'seller_stats.html', {'sellers_stats': sellers_stats})

逻辑说明:

  • Count('merchandise_product_related_name__productREVIEWrelatedNAME'):通过卖家的商品关联到评价表,统计总评价数量
  • Avg('merchandise_product_related_name__productREVIEWrelatedNAME__rating'):计算该卖家所有商品评价的平均分
  • 若你的用户模型有商家专属标识(比如is_seller字段),可在filter中追加is_seller=True,只统计商家用户

2. 模板层展示数据

在对应的模板文件(如seller_stats.html)中,循环渲染每个卖家的统计信息:

{% for seller in sellers_stats %}
    <p>seller-{{ seller.id }}: {{ seller.total_reviews }} reviews, {{ seller.average_rating }} star</p>
{% endfor %}

额外处理:无评分的情况

如果卖家有评价但无评分(rating字段为空),可在模板中做兜底处理:

{% for seller in sellers_stats %}
    <p>seller-{{ seller.id }}: {{ seller.total_reviews }} reviews, {% if seller.average_rating %}{{ seller.average_rating }}{% else %}0{% endif %} star</p>
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:27:15