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

如何在Django中计算并展示供应商的平均评分

解决方案

1. 模型层(models.py)

先确认你的模型结构包含供应商、任务与评分关联,示例结构如下:

from django.db import models

class Vendor(models.Model):
    name = models.CharField(max_length=100)
    # 其他供应商属性,比如联系方式、地址等

class Task(models.Model):
    STATUS_CHOICES = [
        ('completed', '已完成'),
        ('pending', '待处理'),
    ]
    vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE, related_name='tasks')
    status = models.CharField(max_length=20, choices=STATUS_CHOICES)
    score = models.IntegerField(null=True, blank=True)  # 1-5分的评分字段
    # 其他任务属性,比如任务名称、截止日期等

如果已有模型,只需确保Vendor与Task的外键关联正确,且存在有效的评分字段。

2. 视图层(views.py)

在获取供应商列表时,通过聚合函数计算每个供应商的已完成任务平均评分:

from django.db.models import Avg
from django.shortcuts import render
from .models import Vendor

def vendor_list(request):
    # 为每个供应商添加平均评分属性,仅统计已完成且有评分的任务
    vendors = Vendor.objects.annotate(
        avg_score=Avg(
            'tasks__score',
            filter=models.Q(tasks__status='completed') & models.Q(tasks__score__isnull=False)
        )
    )
    return render(request, 'vendor_list.html', {'vendors': vendors})
  • annotate会为每个供应商对象新增avg_score属性,存储计算出的平均值
  • 通过filter限定只计算已完成且评分不为空的任务,避免无效数据干扰

3. 前端HTML模板

在供应商列表表格中渲染平均评分列,处理无评分的情况:

<table>
    <thead>
        <tr>
            <th>供应商名称</th>
            <th>平均评分</th>
            <!-- 其他列,比如联系人、合作次数等 -->
        </tr>
    </thead>
    <tbody>
        {% for vendor in vendors %}
        <tr>
            <td>{{ vendor.name }}</td>
            <td>
                {% if vendor.avg_score %}
                    {{ vendor.avg_score|floatformat:2 }}
                {% else %}
                    暂无评分
                {% endif %}
            </td>
            <!-- 其他列渲染 -->
        </tr>
        {% endfor %}
    </tbody>
</table>
  • floatformat:2将平均评分格式化为两位小数,显示更规范
  • 针对无评分的供应商,显示“暂无评分”替代空白内容

额外提示

如果使用非Django框架(如Flask),核心逻辑一致:查询供应商列表时,关联任务表,筛选已完成任务,聚合计算评分平均值后传递给前端渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:20:32