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

Django编辑产品页面触发DoesNotExist错误求助

问题定位与解决方案

核心问题

触发DoesNotExist错误的根本原因是:视图函数中错误使用了不存在的pid字段查询Product模型。你明确说明Product模型的主键是id,但代码里写的是Product.objects.get(pid=pid)——数据库里没有pid这个字段,自然查不到对应数据。

具体修复步骤

1. 修正视图函数的查询逻辑

把查询条件从pid=pid改为id=pid,同时推荐用get_object_or_404替代直接get(),这样找不到数据时会返回友好的404页面,而非服务器错误:

from django.shortcuts import get_object_or_404

@login_required
def edit_product(request, pid):
    # 用id字段匹配url传入的pid参数
    product = get_object_or_404(Product, id=pid)
    if request.method == "POST":
        form = AddProductForm(request.POST, request.FILES, instance=product)
        if form.is_valid():
            new_product = form.save(commit=False)
            new_product.user = request.user
            new_product.save()
            form.save_m2m()
            return redirect("vendorpannel:dashboard")
        else:
            print(form.errors)
    else:
        form = AddProductForm(instance=product)

    context = {
        "form": form,
        "product": product,
    }
    return render(request, "vendorpannel/edit-product.html", context)

2. (可选但推荐)优化URL路径参数

为避免参数名混淆,建议把URL里的<pid>改成<int:product_id>,同步修改视图函数的参数名,让代码逻辑更清晰:

修改urls.py:

urlpatterns = [
    # ... 其他路径保持不变
    path('edit_product/<int:product_id>', views.edit_product, name='edit_product'),
]

修改视图函数参数:

@login_required
def edit_product(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    # 后续代码逻辑不变

修改模板中的URL调用(仅当参数名修改时):

<form method="POST" enctype="multipart/form-data" action="{% url 'vendorpannel:edit_product' product.id %}">

(这里product.id的传递逻辑是正确的,只要视图参数名和URL参数名对应即可)

验证修复

  1. 重启Django服务
  2. 访问编辑产品页面,确认是否能正常加载对应产品的编辑表单
  3. 提交表单测试保存功能是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:53:29