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参数名对应即可)
验证修复
- 重启Django服务
- 访问编辑产品页面,确认是否能正常加载对应产品的编辑表单
- 提交表单测试保存功能是否正常
内容的提问来源于stack exchange,提问作者user25838783
相关产品推荐
相关产品推荐

