删除商品评论后重定向至quick_view页面的Django问题
Django删除评论后重定向商品详情页的错误修复
问题场景
需要实现删除特定商品的特定评论后,自动重定向到该商品的quick_view.html页面,但当前触发删除时出现以下错误:
TypeError at /DeleteFeedback/22/ DeleteFeedback() missing 1 required positional argument: 'quick_view_id'
错误原因
视图函数DeleteFeedback声明需要id和quick_view_id两个参数,但urls.py中对应的路由仅传递了评论的id参数,导致参数缺失触发类型错误。
修复方案
1. 修改视图函数(views.py)
不需要从URL手动传递商品ID,直接通过评论对象关联的商品获取ID,逻辑更可靠且避免参数传递错误:
def DeleteFeedback(request, id): # 获取目标评论对象,用get_object_or_404处理评论不存在的情况 feedback = get_object_or_404(ProductREVIEWS, pk=id) # 通过评论关联的商品获取商品ID product_id = feedback.product.id # 执行删除操作 feedback.delete() messages.success(request, "Successfully your feedback deleted.") # 重定向到对应商品的quick_view页面 return redirect('quick_view', product_id)
2. 确认路由配置(urls.py)
保持现有路由即可,因为现在视图仅需要评论的id参数:
path("DeleteFeedback/<int:id>/", views.DeleteFeedback, name="DeleteFeedback")
3. 优化删除请求方式(可选但推荐)
为避免GET请求误触发删除操作,在模板中使用POST表单提交删除请求:
<!-- 在quick_view.html的评论列表中添加删除表单 --> {% for feedback in quick_view.productreviews_set.all %} <div class="feedback-item"> <p>{{ feedback.feedBACK }}</p> <form action="{% url 'DeleteFeedback' feedback.id %}" method="POST"> {% csrf_token %} <button type="submit" onclick="return confirm('确定要删除这条评论吗?')">删除评论</button> </form> </div> {% endfor %}
验证效果
修改完成后,删除评论时会自动获取该评论所属的商品ID,并重定向到对应商品的quick_view页面,原TypeError错误消失,功能正常实现。
内容的提问来源于stack exchange,提问作者Mossaddak
相关产品推荐
相关产品推荐

