当我试图使用这个简单的表单保存数据时,它没有被发布。宣告行动或网址有什么不对吗?
模型文件
from django.db import models
# Create your models here.
class Contact(models.Model):
name = models.CharField(max_length=30, null=True, blank=True)
company_id = models.CharField(max_length=30)
def __unicode__(self):
return self.name
Form.py使用modelform
from contact.models import Contact
from django.forms import ModelForm
class AddcntForm(ModelForm):
class Meta:
model = Contact
浏览
from contact.forms import AddcntForm
from django.contrib import messages
from django.shortcuts import render_to_response, redirect, get_object_or_404
from django.template.context import RequestContext
def add_cnt(request, form_class=AddcntForm):
print request.method
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
form.save(request)
messages.success(request, "New Contact added.")
return redirect('##success##')
else:
form = form_class()
return render_to_response(
'vec/add_cnt.html',
{'form': form},
context_instance=RequestContext(request))
地址
from django.conf.urls import *
from django.conf import settings
urlpatterns = patterns('contact.views',
url(r'^addcnt/$', 'add_cnt', name='add_cnt'),
)
模板文件如下
{% block content %}
<form method="post" action="/hr/addcnt/" >{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Ok" />
</form>
{% endblock %}
答案 0 :(得分:2)
当方法为request.GET
时,您将POST
querydict传递给表单。您应该改为request.POST
。
此外,您将请求传递给form.save()
。 ModelForm.save()
期望的唯一(可选)参数是布尔“commit”标志,如果为true,则阻止表单有效地保存实例(cf https://docs.djangoproject.com/en/1.5/topics/forms/modelforms/#the-save-method)。请记住,在Python中,每个对象都有一个布尔值...现在你说的是不的表单保存你的实例;)
答案 1 :(得分:0)
我对同样的问题也感到困惑。
最初调用表单时是“ GET”请求,因此语句-print request.method将显示“ GET”。
在表单中输入值后(如果您单击提交),您可以在控制台中看到相同的语句-print request。方法将打印“ POST”,这实际上是一个发布请求。