Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中使用ModelForm添加到数据库_Django_Forms_Django Forms - Fatal编程技术网

在Django中使用ModelForm添加到数据库

在Django中使用ModelForm添加到数据库,django,forms,django-forms,Django,Forms,Django Forms,刚到Django的我已经用尽了所有的论坛和教程,而且我在将表单数据导入数据库时仍然遇到问题。我有一个简单的模型,包括一个名字和一个电子邮件字段,我最终会在程序中引用它。单击“提交”后,我可以加载不同的页面,但我的数据不会发布到数据库。我已经尝试了我能想到的一切,所以我的代码可能在这一点上被提升了,但在当前的迭代中,这就是我所拥有的: #models.py from django.db import models from django.forms import ModelForm cl

刚到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>
#models.py
从django.db导入模型
从django.forms导入ModelForm
班级赞助人(型号.型号):
name=models.CharField(最大长度=200)
email=models.EmailField(最大长度=75)
定义(自身):
返回self.name
班级表格(模型表格):
类元:
型号=用户
#view.py
从django.shortcuts导入render_到_响应,获取_object_或_404
来自顾客。模型进口顾客
从django.template导入请求上下文
处理器从django.core.context_导入csrf
从django.core.urlResolver反向导入
从django.forms导入ModelForm
def索引(请求):
如果request.method==“POST”:
post=request.post
name=post['name']
email=post['email']
f=用户表单(请求.发布)
新用户=f.保存()
返回render\u to\u响应('customers/index.html',
上下文\实例=请求上下文(请求))
#html
/摄像师/
{%csrf_令牌%}
名称
电子邮件
{{error}}
任何帮助都将不胜感激

post = request.POST
name = post['name']
email = post['email']
f = PatronForm(request.Post)
new_patron = f.save()
可以重新编写为(注意
请求的情况。POST
):

但在保存之前,您应该检查表单中的错误,因此:

f = PatronForm(request.POST)
if f.is_valid():
    new_patron = f.save()
您的表单标签中也有输入错误,它应该是“action”,而不是“aciton”。模板中的{error}没有引用视图中的任何内容。调试时,让窗体自己呈现可能会有所帮助,如:

{{ form.as_p }}
因此,您可以在表单提交中看到任何错误。

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

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

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

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

{{form.name}
{{form.name.errors}

{{form.email} {{form.email.errors}


Thanks@Tom现在,当我尝试提交全局名称时,我遇到了这个错误,'PatronForm'没有定义11 f=PatronForm(request.POST)。。。▶ Local varsIn views.py,您需要导入表单。为了保持一致性,它应该放在一个名为“forms.py”的单独文件中,但在您的情况下,它看起来像“from patron.models import PatronForm”。谢谢,在对代码进行更改后,我得到了以下信息:全局名称“PatronForm”未定义,但有以下错误回溯:fileget_response 111中的“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/core/handlers/base.py”。response=callback(request,*callback_args,**callback_kwargs)文件“/Users/curtis/picturetaketest3/mysite/customers/views.py”,索引11.f=customorform(request.POST)嗯,您还没有将其导入到视图中。
<p>
{{ form.name }} 
{{ form.name.errors }}
</p>

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