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

Django中submit_review路由匹配失败求助:NoReverseMatch错误排查

解决NoReverseMatch错误及星级评分表单问题

错误根源分析

从错误信息和代码来看,核心问题有两处:

1. URL路由反向解析失败

错误提示"找不到无参数的submit_review路由",但你的路由submit_review/<int:game_id>/明确要求传入整数类型的game_id参数。问题可能出在:

  • 命名空间缺失:如果主urls.py通过命名空间包含Action应用路由(比如path('', include('Action.urls', namespace='action'))),模板调用URL时必须加命名空间前缀,否则Django无法定位正确路由。
  • 参数异常:模板中的description.id可能不存在或不是整数,无法匹配<int:game_id>的路由规则。

2. 模型字段赋值错误

视图里data.user__id=request.user.id是错误写法,Django模型中外键字段赋值应使用user_id(字段名+_id)或直接赋值用户对象data.user=request.user,user__id是查询时的双下划线语法,不能用于直接赋值。


分步解决方案

步骤1:修复URL反向解析

情况A:主urls.py使用命名空间

如果主urls.py配置如下:

from django.urls import path, include

urlpatterns = [
    # 其他路由
    path('', include('Action.urls', namespace='action')),
]

模板中的URL调用必须添加命名空间前缀:

<form action="{% url 'action:submit_review' description.id %}" method="POST">

情况B:主urls.py未使用命名空间

先验证description.id是否存在且为整数,可在模板临时添加打印:

<!-- 临时验证参数 -->
<p>Game ID: {{ description.id }}</p>
<form action="{% url 'submit_review' description.id %}" method="POST">

若description.id为空或非整数,检查action_description视图是否正确传递description对象到模板。

步骤2:修复模型字段赋值错误

修改views.py中用户ID的赋值代码:

# 替换错误写法
# data.user__id=request.user.id
# 改为以下二者之一:
data.user_id = request.user.id
# 或者
data.user = request.user

步骤3:补充GET请求处理

当前视图仅处理POST请求,若用户通过GET访问submit_review路由会报错,建议添加GET请求逻辑:

def submit_review(request,game_id):
    url = request.META.get('HTTP_REFERER')
    if request.method == 'POST':
        # 原POST处理逻辑
        ...
    # 处理GET请求,重定向回原页面或首页
    else:
        return redirect(url) if url else redirect('action')

验证测试

  1. 重启Django服务器
  2. 访问游戏详情页,检查表单action属性是否生成类似/submit_review/3444/的正确URL
  3. 提交测试评分,确认评论可正常添加/更新且无报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:53:20