您好我正在尝试更新django中的一行,但我收到错误
update_form() takes exactly 2 arguments (1 given)
这是我的代码:
view.py:
def update_form(request, id):
if request.method == 'POST':
a=newleave.objects.get(id=id)
form = leave_application(request.POST, instance=a)
if form.is_valid():
form.save()
return HttpResponseRedirect('successful.html')
else:
a=newleave.objects.get(id=id)
form = leave_application(instance=a)
return render_to_response('update_form.html'{'form':form},
context_instance=RequestContext(request))
form.py:
class leave_application(forms.ModelForm):
class Meta:
model = newleave
fields =('First_Name', 'Last_Name', 'department', 'position', 'leave_type', 'Specify_details', 'start_Date', 'end_date', 'total_working_days', 'username')
update_form.html:
<form action ="/update_form/" method="post">{%csrf_token%}
<table>
{{form.as_table}}
</table>
<br>
<input type="submit" name="submit" value="Save Record" >
有人能告诉我我做错了吗?
答案 0 :(得分:1)
问题可能在你的urls.py。
update_form
视图采用参数id
,因此您应将其包含在网址模式中。
url(r'^update_form/(?P<id>\d+)/$', update_form, name='update_form')
例如,要编辑id = 1的对象,您将转到/update_form/1/
您必须在模板上下文中包含id
return render_to_response('update_form.html'{'form':form, 'id': id},
context_instance=RequestContext(request))
并将其包含在表单操作中:
<form action ="/update_form/{{ id }}/" method="post">{%csrf_token%}
使用url标签稍微好一些:
<form action ="{% url 'update_form' %}" method="post">{%csrf_token%}
答案 1 :(得分:1)
您应该将行的id
传递给update_form
视图:
<form action="{% url 'update_form' id %}" method="post">
在 urls.py :
url(r'^update_form/(?P<id>\d+)/$', update_form, name='update_form'),