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>
是这行出错?
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