5

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>

任何帮助将不胜感激

4

2 回答 2

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()

您的表单标签中也有错字,它应该是“action”,而不是“aciton”。您在模板中的 {{ error }} 并不引用您视图中存在的任何内容。在调试时,让表单呈现自己可能会有所帮助,例如:

{{ form.as_p }}

因此您可以在表单提交中看到任何错误。

于 2012-05-31T13:52:49.607 回答
0

您不需要“每个论坛和教程”,您只需要官方文档,其中解释清楚。您在该链接上看到的代码的唯一变化是您需要在form.save()“处理数据”位内添加(并且,您应该在 render_to_response 调用中使用 RequestContext,就像您已经做的那样)。

另一件要改变的是,您应该依靠 Django 来呈现模板中的整个字段,而不仅仅是值:

<p>
{{ form.name }} 
{{ form.name.errors }}
</p>

<p>
{{ form.email }}
{{ form.email.errors }}
</p>
于 2012-05-31T13:58:42.813 回答