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

Django开发Products模型CRUD时插入数据无法在网页显示

Django Products模型CRUD插入数据不展示问题排查

核心错误点

你的代码存在4个直接导致功能异常的问题:

  • 请求方法判断逻辑错误:原代码写的if request.POST == "POST":完全不成立,Django中判断POST请求必须用request.method属性,当前逻辑下所有POST请求都会直接走GET分支返回插入页,数据根本不会执行入库逻辑。
  • 字段名映射不匹配:模型中商品详情字段定义为prod_details,但你构造序列化数据时用的key是product_details,序列化器校验时会因缺少必填字段直接抛错,就算请求方法判断改对了也无法通过校验保存数据。
  • 表单下拉框配置错误:分类、尺寸两个下拉框的默认提示项没有设置空值和禁用属性,用户未选择选项直接提交时会把提示文本"Open this select menu"作为字段值提交,该文本长度超过categories字段设置的15字符上限,会直接触发校验失败;另外分类选项的value写的是1/2/3,和选项展示的分类名不一致,就算提交成功存到库里的也是数字,不是实际分类名称。
  • 冗余错误:代码中print('POST',id)、print('GET',id)引用了未定义的id变量,运行到该行会直接抛出NameError异常,这两行完全没有调试意义,可以直接删除。

修正代码

修正后的insert视图函数

def insert(request):
    if request.method == "POST":
        insert_clothes = {
            'categories': request.POST.get('categories'),
            'sub_categories': request.POST.get('sub_categories'),
            'color': request.POST.get('color'),
            'size': request.POST.get('size'),
            'title': request.POST.get('title'),
            'price': request.POST.get('price'),
            'sku_number': request.POST.get('sku_number'),
            # 字段名和模型保持一致
            'prod_details': request.POST.get('product_details'),
            'quantity': request.POST.get('quantity')
        }
        form = POLLSerializer(data=insert_clothes)
        if form.is_valid():
            form.save()
            messages.success(request, 'Record Inserted successfully!')
            return redirect('polls:show')
        else:
            print(form.errors)
            messages.error(request, f'Insert failed: {form.errors}')
            return render(request, 'polls/product_insert.html')
    return render(request, 'polls/product_insert.html')

修正后的表单下拉框部分

<!-- 分类下拉框:默认项设为空值+禁用+必填,value和展示文本一致 -->
<select class="form-select" name="categories" required>
    <option selected value="" disabled>Open this select menu</option>
    <option value="9-6 WEAR">9-6 WEAR</option>
    <option value="DESI SWAG">DESI SWAG</option>
    <option value="FUSION WEAR">FUSION WEAR</option>
    <option value="BRIDAL WEAR">BRIDAL WEAR</option>
</select>

<!-- 尺寸下拉框:默认项设为空值+禁用+必填 -->
<select class="form-select" name="size" required>
    <option selected value="" disabled>Open this select menu</option>
    <option value="SM">SM</option>
    <option value="M">M</option>
    <option value="L">L</option>
    <option value="XL">XL</option>
    <option value="XXL">XXL</option>
    <option value="XXXL">XXXL</option>
</select>

验证步骤

  1. 完成上述修改后重启Django服务
  2. 访问插入页面,选择分类、尺寸,填写所有字段后提交
  3. 若控制台打印序列化器错误,根据错误提示调整对应字段配置
  4. 提交成功后会自动跳转到展示页,即可看到新插入的商品数据
  5. 若仍未展示,可登录Django admin后台查看Products表,确认数据是否实际入库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:06:33