Django员工管理系统更新记录功能无法正常运行求助
Django员工管理系统更新功能故障排查修复
更新功能无法正常运行是4处代码逻辑错误导致的,按以下内容修改即可:
核心错误点
- 路由与视图参数不匹配:urls.py中更新接口的路径参数名为
id,但视图函数update_emp的形参定义为emp_id,Django无法正确传入员工ID,默认取0值查询数据,无法匹配到目标员工记录。 - 表单类继承类型错误:现有
employeeForm继承自基础forms.Form,该类不支持绑定模型实例的instance参数,也不提供直接保存数据到数据库的save()方法,调用时会直接抛出异常。 - 重定向逻辑错误:表单保存后执行
HttpResponseRedirect('/'+id)时,代码中未定义id变量,且拼接的路径无实际对应页面,会触发404错误。 - 模板表单未显式指定提交地址(非必现问题,路由层级复杂时会出现提交路径错误)。
修复后完整代码
forms.py(替换原有内容)
from django import forms from .models import Employee class employeeForm(forms.ModelForm): class Meta: model = Employee fields = ['fname', 'lname'] widgets = { 'fname': forms.TextInput(attrs={'class':'form-control'}), 'lname': forms.TextInput(attrs={'class':'form-control'}), } labels = { 'fname': 'Value1', 'lname': 'Value2', } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['fname'].required = False self.fields['lname'].required = True
urls.py(修正更新路由的参数名)
from django.urls import path , include from . import views urlpatterns = [ path('', views.index, name = 'index'), path('all_emp', views.all_emp, name = 'all_emp'), path('add_emp', views.add_emp, name = 'add_emp'), path('remove_emp', views.remove_emp, name = 'remove_emp'), path('remove_emp/<int:emp_id>', views.remove_emp, name = 'remove_emp'), path('filter_emp', views.filter_emp, name = 'filter_emp'), # 统一参数名为emp_id,和视图形参保持一致 path('update_emp/<int:emp_id>', views.update_emp, name='update_emp'), ]
views.py(修正视图逻辑)
from django.shortcuts import get_object_or_404, render, redirect from .models import Employee from .forms import employeeForm def update_emp(request, emp_id=0): context = {} obj = get_object_or_404(Employee, id=emp_id) form = employeeForm(request.POST or None, instance=obj) if form.is_valid(): form.save() # 保存后跳转到员工列表页,可根据需求替换为其他路由名 return redirect('all_emp') context['form'] = form return render(request, 'update_emp.html', context)
update_emp.html(可选优化,补全表单提交地址)
<div class="main"> <form method="POST" action="{% url 'update_emp' form.instance.id %}"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="Update"> </form> </div>
内容的提问来源于stack exchange,提问作者Vipul BHAIYA
相关产品推荐
相关产品推荐

