Python-Django中修改信息时报错Field 'id' expected a number but got ''.

修改员工信息时报错Field 'id' expected a number but got ''.
问题相关代码,请勿粘贴截图

views中功能代码:

def edit_employee_old(request,emp_id):
    if request.method=="POST":
        id = request.POST.get('id')
        name = request.POST.get('name')
        email = request.POST.get('email')
        dep = request.POST.get('dep')
        info = request.POST.get('info')
        groups = request.POST.getlist('group')
        emp = employee.objects.get(id = id)
        emp.name = name
        emp.email = email
        emp.dep_id = dep
        emp.info_id = info
        emp.group.set(groups)
        emp.save()
        return redirect('/test_orm_old/list_employee_old/')
    emp = employee.objects.get(id = emp_id)
    dep_list = department.objects.all()
    group_list = group.objects.all()
    info_list = employeeinfo.objects.all()
    return render(request,'test_orm_old/edit_employee_old.html',{'emp':emp,'dep_list':dep_list,'group_list':group_list,'info_list':info_list})

html代码:

<!DOCTYPE html>
<html lang="en">
   <head>
       <meta charset="UTF-8">
       <title>修改</title>   
   </head> 
   <body>
       <div align="center">
           <h1>修改员工信息</h1>
           <hr>
           <form action="" method="post">
               {% csrf_token %}
               <input type="hidden" name="id" id="id" value="{{ emp_id }}">
               <div>
                   <label>姓名:</label>
                   <input type="text" name="name" id="name" value="{{ emp_name }}">
               </div>
               <br>
               <div>
                   <label>邮箱:</label>
                   <input type="text" name="email" id="email" value="{{ emp_email }}">
               </div>
               <br>
               <div>
                   <label>联系方式:</label>
                <!-- 对于这里的<select>标签中的<option>,由for循环取出相关值赋给他的value属性 -->
                   <select name="info" id="info">
                       {% for info in info_list %}
                <!-- emp.info_id与info.id相同,说明员工一对一键字段值与员工补充信息记录主键值相同,设置<option>标签为selected -->
                       {% if emp.info_id == info_id %}
                       <option value="{{ info.id }}" selected> {{ info.phone }}||{{ info.address }} </option>
                       {% else %}
                       <option value="{{ info.id }}" selected> {{ info.phone }}||{{ info.address }} </option>
                       {% endif %}
                       {% endfor %}
                   </select>
               </div>
               <br>
               <div>
                   <label>部门:</label>
                   <select name="dep" id="dep">
                       {% for dep in dep_list %}
                       {% if emp.dep_id == dep.id %}
                       <option value="{{ dep.id }}" selected>{{ dep.dep_name }}</option>
                       {% else %}
                       <option value="{{ dep.id }}" selected>{{ dep.dep_name }}</option>
                       {% endif %}
                       {% endfor %}
                   </select>
               </div>
               <br>
               <div>
                   <label>团体:</label>
                   <!-- 字段group是多对多键,设置<select>标签属性multiple="true" -->
                   <select name="group" id="group" multiple="true">
                       {% for group in group_list %}
                   <!-- 如果团体group记录对象在employee当前记录多对多键关联团体记录对象的集合中,设置当前<option>标签为selected -->
                       {% if group in emp.group.all %}
                       <option value="{{group.id}}" selected>{{ group.group_name }}</option>
                       {% else %}
                       <option value="{{group.id}}" selected>{{ group.group_name }}</option>
                       {% endif %}
                       {% endfor %}
                   </select>
               </div>
               <br>
               <div><input type="submit" value="保存"></div>
           </form>
       </div>
   </body>
</html>


运行结果及报错内容

img

img

是这行出错?

emp = employee.objects.get(id = id)

看提示,貌似是因为 employee 的id 是int 类型, 你做get 操作时,传了个空字符串给 条件
条件里的id ,建议先转int

emp = employee.objects.get(id = int(id))

建议你先查查 页面的html 代码, 看看input 里的value 是否有值

<input type="hidden" name="id" id="id" value="{{ emp_id }}">

如果没有,检查一下你调用 edit_employee_old 的位置 , 是否正确传送了emp_id