Django项目访问客户详情页报NoReverseMatch错误排查求助
问题根因
你在customer视图函数中,传递给customer.html模板的客户对象变量名为customer_key,但模板内调用创建订单路由时,错误使用了不存在的变量名customer,导致传入空值触发路由匹配失败。
修复方案
1. 核心修复(解决当前报错)
修改customer.html中的「Place Order」按钮代码:
将原来的
<a class="btn btn-outline-info btn-sm btn-block" href="{% url 'create_order' customer.id %}">Place Order</a>
替换为
<a class="btn btn-outline-info btn-sm btn-block" href="{% url 'create_order' customer_key.id %}">Place Order</a>
2. 潜在隐患修复(建议同步修改,避免后续报错)
- 修正
urls.py中create_order路由末尾缺失的斜杠,保持路由规则统一:path('create_order/<str:pk>/', views.createOrder, name='create_order'), - 修正
views.py中表单校验的写法,is_valid是方法必须加括号调用,否则非法提交也会被判定为有效:# createOrder和updateOrder函数中都要修改 if form_value.is_valid(): - 优化
createOrder函数的POST逻辑,避免前端恶意篡改提交的客户ID:def createOrder(request, pk): customer = Customer.objects.get(id=pk) form_value = OrderForm(initial={'customer':customer}) if request.method == 'POST': form_value = OrderForm(request.POST) if form_value.is_valid(): # 手动赋值客户,不依赖前端提交的参数 order = form_value.save(commit=False) order.customer = customer order.save() return redirect('/') context = {'form_key':form_value} return render(request, 'accounts/order_form.html', context)
内容的提问来源于stack exchange,提问作者Lewcamps
相关产品推荐
相关产品推荐

