You need to enable JavaScript to run this app. Django模板添加投诉编辑跳转url标签后页面报错,该如何排查?
优惠活动
大模型
产品
解决方案
定价
更多

Django模板添加投诉编辑跳转url标签后页面报错,该如何排查?

问题原因及修复方案
  • 直接报错原因:模板循环变量引用错误
    你在投诉历史页模板中用{% for c in complaint %}遍历所有投诉,上下文传入的complaint是当前用户的全部投诉查询集,不是单个投诉对象。你在url标签中写{% url 'Complaint' complaint.id %}试图调用查询集的id属性,触发变量不存在的报错。
    修复方法:把url标签中的变量改成循环内的单个对象变量c,即修改为{% url 'Complaint' c.id %}

  • 后续访问编辑页会遇到的问题1:URL参数和类视图不匹配
    Django通用类视图UpdateView默认从URL路径中获取名为pk的参数作为查询数据的主键,你当前urls.py中定义的路径参数是<int:id>,和默认规则不匹配,后续打开编辑页会报找不到对象的错误。
    两种修复方案选其一即可:

  1. 修改urls.py中的路径定义为path('Complaint/<int:pk>/edit', accounts.views.EditComplaint.as_view(), name='Complaint')
  2. 在EditComplaint类中添加属性指定主键参数名:
class EditComplaint(UserPassesTestMixin, UpdateView):
    model = Complaint
    pk_url_kwarg = 'id' # 新增这行,指定用url里的id参数作为主键
    # 其他原有属性保留
  • 后续访问编辑页会遇到的问题2:字段配置不匹配
    你在EditComplaint的fields属性中声明了info字段,但是你的Complaint模型中并没有定义这个字段,加载编辑页面时会触发字段不存在的报错。
    修复方法:把fields列表中的'info'项删掉即可。

  • 后续提交编辑会遇到的问题:form_valid方法写法错误
    UpdateView的form_valid方法默认接收的参数是form而非request,且你重写的逻辑完全重复了通用类视图已经实现的表单校验、保存逻辑,会导致提交编辑后逻辑异常。如果没有特殊的自定义需求,你可以直接删掉重写的form_valid方法,给类添加success_url属性指定提交成功后的跳转地址即可:

from django.urls import reverse_lazy
class EditComplaint(UserPassesTestMixin, UpdateView):
    model = Complaint
    fields = ('reportnumber', 'eventdate', 'event_type', 'device_problem', 
  'manufacturer', 'product_code', 'brand_name', 'exemption', 'patient_problem', 'event_text', 
  'document') 
    success_url = reverse_lazy('MyHistory') # 提交成功后跳回投诉历史页
    # 原有test_func方法保留即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:21:03