'Contact'是模型,'ContactForm'是模型形式
urls.py
(r'^contact/edit/(?P<p_id>\d+)$',edit_contact_page),
views.py
def edit_contact_page(request,p_id):
if request.method == 'POST':
form = ContactForm(request.POST,instance=obj)
if form.is_valid():
form.save()
return HttpResponseRedirect('/contact/success')
else:
obj=Contact.objects.get(pk=p_id)
form=ContactForm(instance=obj)
variables = RequestContext(request, {'form': form})
return render_to_response('registration/edit_contact.html',variables)
#edit_contact.html
<form method="post" action="/contact/success/" class="form-signin">
{% csrf_token %}
{{ form.name.errors }}
<label>Name</label>
{{ form.name }}
<br>
{{ form.email.errors }}
<label>Email</label>
{{ form.email }}
<br>
{{ form.msg.errors }}
<label>Message</label>
{{ form.msg }}
<br>
{{ form.phone.errors }}
<label>Phone</label>
{{ form.phone }}
<button class="btn btn-large btn-primary" type="submit">Save</button>
</form>
答案 0 :(得分:0)
删除commit = False。你告诉django不要提交你的更改。我不相信obj存在于你的post方法if语句中。它只存在于你的else语句中。
答案 1 :(得分:0)
您还需要将最后两行返回到一个缩进级别,因此它们将在表单发布但无效时执行。
答案 2 :(得分:0)
您的表单正在提交/contact/success
(这就是加载该页面的原因),但是从未创建新联系人,因为您的查看方法的网址/contact/edit/
未被调用。
您需要修复表单网址。
答案 3 :(得分:0)
Contact instance should be placed at top
indent last two lines of views.py
def edit_contact_page(request,p_id):
obj=Contact.objects.get(pk=p_id)
if request.method == 'POST':
form = ContactForm(request.POST,instance=obj)
if form.is_valid():
form.save()
return HttpResponseRedirect('/contact/success')
else :
form=ContactForm(instance=obj)
variables = RequestContext(request, {'form': form, 'p_id': p_id})
return render_to_response('registration/edit_contact.html',variables)
form url
<form method="post" action="/contact/edit/{{p_id}}" class="form-signin">