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

Django NoReverseMatch错误解决及后台查看评分需求

解决NoReverseMatch错误 & 配置Admin查看评分

一、修复按钮跳转的NoReverseMatch错误

这个错误基本是URL路由名不匹配或者没传必要参数导致的,按你的场景一步步排查:

1. 核对URL路由配置

先确保你的app路由里给评分页面设置了带参数的命名路由,比如:

# 你的app/urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 其他路由...
    path('ratings/<int:product_id>/', views.ratings_page, name='product_ratings'),
]

重点是name='product_ratings'这个命名,还有<int:product_id>用来接收商品ID参数。

2. 修正模板里的按钮链接

在商品列表模板中,“View Ratings”按钮的跳转要正确使用{% url %}标签,传对商品ID:

<!-- 商品项的模板代码 -->
<a href="{% url 'product_ratings' product.id %}" class="btn">View Ratings</a>

注意:如果你的路由名不是product_ratings,要改成你实际定义的名称;同时确保模板里能拿到product对象,能获取到它的id。

3. 确保视图函数接收参数

处理评分页面的视图要能接收到product_id参数,比如:

# views.py
from django.shortcuts import get_object_or_404, render
from .models import Product

def ratings_page(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    # 这里添加你的评分查询、提交逻辑
    return render(request, 'ratings.html', {'product': product})

二、配置Admin后台查看评分

假设你有Rating模型关联着Product(示例模型如下),按以下步骤配置:

1. 示例Rating模型(如果还没定义)

# models.py
from django.db import models
from django.contrib.auth.models import User

class Product(models.Model):
    name = models.CharField(max_length=100)
    # 你的其他商品字段

class Rating(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='ratings')
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    score = models.IntegerField(choices=[(1,'1星'),(2,'2星'),(3,'3星'),(4,'4星'),(5,'5星')])
    comment = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

2. 注册模型到Admin

在admin.py里注册模型,同时优化显示效果:

# admin.py
from django.contrib import admin
from .models import Product, Rating

# 内嵌评分到商品详情页
class RatingInline(admin.TabularInline):
    model = Rating
    extra = 0  # 不显示空白的评分表单
    readonly_fields = ('user', 'created_at')  # 用户和创建时间禁止修改

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    inlines = [RatingInline]  # 商品详情页下方显示关联的评分
    list_display = ('name', 'avg_rating')  # 商品列表页显示平均评分

    def avg_rating(self, obj):
        # 计算平均评分
        ratings = obj.ratings.all()
        if ratings:
            return round(sum(r.score for r in ratings)/len(ratings), 1)
        return '暂无评分'
    avg_rating.short_description = '平均评分'

@admin.register(Rating)
class RatingAdmin(admin.ModelAdmin):
    list_display = ('product', 'user', 'score', 'created_at')
    list_filter = ('score', 'created_at')
    search_fields = ('product__name', 'user__username')

3. 查看评分的方式

  • 进入Admin的商品列表,点击任意商品,就能在页面下方看到该商品的所有评分;
  • 直接进入“Ratings”模块,能看到所有评分的列表,还能按星级、时间筛选,按商品名/用户名搜索。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:03:30