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

Django HttpResponseRedirect跳转失败及Category查询不存在问题求助

问题解决:CS50 Commerce 创建列表时 Category 不存在错误

问题描述

在完成CS50 Project2 Commerce项目时,点击创建新列表的提交按钮后无法跳转到index页面,触发错误:
auctions.models.Category.DoesNotExist: Category matching query does not exist
但通过admin页面可以正常添加分类。

错误原因

问题出在前端表单的分类下拉框配置:
在create.html的下拉选项中,<option>的value被写死为字符串"category",而非当前循环的分类实际名称。这导致表单提交时,后端收到的category参数永远是"category",而数据库中不存在该名称的分类,进而Category.objects.get(categoryName=category)查询失败抛出异常。

修复方案

方案1:传递分类名称(匹配现有后端逻辑)

修改create.html中的下拉选项代码:

<!-- 原代码 -->
<option value="category">{{category}}</option>

<!-- 修改后 -->
<option value="{{category.categoryName}}">{{category}}</option>

方案2:传递分类ID(更稳定,避免名称重复问题)

如果你的Category模型包含id字段,推荐用ID查询,更可靠:

  1. 修改views.py中的分类查询逻辑:
# 原代码
category = request.POST["category"]
categoryData = Category.objects.get(categoryName=category)

# 修改后
category_id = request.POST["category"]
categoryData = Category.objects.get(id=category_id)
  1. 修改create.html中的下拉选项:
<!-- 原代码 -->
<option value="category">{{category}}</option>

<!-- 修改后 -->
<option value="{{category.id}}">{{category}}</option>

额外优化:添加异常处理

为了避免因其他意外情况导致的查询失败,建议给get方法添加异常捕获:

from django.contrib import messages

# 在else分支中修改查询部分
try:
    categoryData = Category.objects.get(categoryName=category)  # 或对应方案2的id查询
except Category.DoesNotExist:
    messages.error(request, "所选分类不存在,请重新选择")
    return HttpResponseRedirect(reverse("create"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:45:32