Django的新手,我已经用尽了所有论坛和教程,而且我仍然无法将表单数据导入数据库。我有一个简单的模型,包括一个名称和一个电子邮件字段,我将最终在该程序中引用。单击提交后我可以加载不同的页面,但我的数据不会发布到数据库。我已经尝试了所有我能想到的东西,所以我的代码可能在这一点上得到了提升,但在当前的迭代中,这就是我所拥有的:
#models.py
from django.db import models
from django.forms import ModelForm
class Patron(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField(max_length=75)
def _unicode_(self):
return self.name
class PatronForm(ModelForm):
class Meta:
model = Patron
#view.py
from django.shortcuts import render_to_response, get_object_or_404
from patrons.models import Patron
from django.template import RequestContext
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
from django.forms import ModelForm
def index(request):
if request.method == 'POST':
post = request.POST
name = post['name']
email = post['email']
f = PatronForm(request.Post)
new_patron = f.save()
return render_to_response('patrons/index.html',
context_instance=RequestContext(request))
#html
<body>
<h1>/Picture Taker/</h1>
<form aciton="." name="patron" method="post" >
{% csrf_token %}
<label>
<div>name</div> <input type="text" name="name" id="name" value="{{name}}">
</label>
<label>
<div>email</div> <input type="text" name="email" id="email" value="{{email}}">
</label>
<div class="error">{{error}}</div>
<input type="submit" value="Submit">
</form>
</body>
非常感谢任何帮助
答案 0 :(得分:4)
全部
post = request.POST
name = post['name']
email = post['email']
f = PatronForm(request.Post)
new_patron = f.save()
可以重写为(注意request.POST
的情况):
f = PatronForm(request.POST)
new_patron = f.save()
但您应该在保存之前检查表单中的错误,所以:
f = PatronForm(request.POST)
if f.is_valid():
new_patron = f.save()
您的表单标签中也有拼写错误,它应该是“操作”,而不是“aciton”。您模板中的{{error}}不会引用视图中的任何内容。在调试时,让表单呈现自己可能会有所帮助,例如:
{{ form.as_p }}
因此您可以在表单提交中看到任何错误。
答案 1 :(得分:0)
您不需要“每个论坛和教程”,您只需要官方文档,this is explained clearly。您在该链接中看到的代码中唯一的变化是您需要在“处理数据”位中添加form.save()
(并且,您应该在render_to_response调用中使用RequestContext,就像您已经做的那样)。
要改变的另一件事是你应该依靠Django来渲染模板中的整个字段,而不仅仅是值:
<p>
{{ form.name }}
{{ form.name.errors }}
</p>
<p>
{{ form.email }}
{{ form.email.errors }}
</p>