Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Python 数据库保存时出错_Python_Django_Database_Sqlite - Fatal编程技术网

Python 数据库保存时出错

Python 数据库保存时出错,python,django,database,sqlite,Python,Django,Database,Sqlite,我试图创建一个表单,并在单击提交按钮时将数据保存到数据库。但数据并没有保存到数据库中。我没有得到任何错误。我是django 1.11。我提到了几个问题,这些答案并不能解决我的问题。有人能帮忙修一下吗?提前谢谢 model.py from __future__ import unicode_literals from django.db import models class NameForm(models.Model): your_name = models.CharField(ma

我试图创建一个表单,并在单击提交按钮时将数据保存到数据库。但数据并没有保存到数据库中。我没有得到任何错误。我是django 1.11。我提到了几个问题,这些答案并不能解决我的问题。有人能帮忙修一下吗?提前谢谢

model.py

from __future__ import unicode_literals

from django.db import models

class NameForm(models.Model):
    your_name = models.CharField(max_length=200)
views.py

from __future__ import unicode_literals

from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from django.views import generic
from django.template.response import TemplateResponse

from home.models import NameForm
from .forms import NameForm

class NameView(generic.View):
    model_class = NameForm
    initial = {'key': 'value'}
    template_name = 'home/name.html'

    def get(self, request, *args, **kwargs):
        model = self.model_class()
        return render(request, self.template_name, {'model': NameForm})

    def post(self, request, *args, **kwargs):
        if request.method == 'POST':
            form = NameForm(request.POST)
            if form.is_valid():
                return HttpResponseRedirect('thanks/')
                if form.is_valid():
                    form.save()
                else:
                    form = NameForm()

                    return render(request, 'name.html', {'form': form})
url.py

from django.conf.urls import url

from . import views

app_name = 'home'

urlpatterns = [
    url(r'^$', views.NameView.as_view(), name='name'),
    url(r'^your-name/$', views.NameView.as_view(), name='name'),
    url(r'^your-name/thanks/$', views.NameView.as_view(), name='name'),
]
home/name.html

<form action="your-name/" method="post">
  {% csrf_token %}
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

这是因为您在保存之前已被重定向(
返回HttpResponseRedirect('Thank/')

您的版本:

if form.is_valid():
    return HttpResponseRedirect('thanks/')
        if form.is_valid():
            form.save()
        else:
            ...
而您所寻找的版本,只有在表单保存并删除多余的第二个
表单后才使用重定向。是否有效()
检查:

if form.is_valid():
    form.save()
    return HttpResponseRedirect('thanks/')
else:
    ...

如果您使用Django中包含的电池,您将过得更轻松。下面是以下版本中的修复程序列表

  • 不要重复使用名字
    NameModel
    是一个模型,
    NameForm
    是一个表单。(然而,你通常真的会从模型名称中省略
    Model
    ——只是
    name
    听起来像是一个愚蠢的模型名称……)
  • 在管理模型时使用
    ModelForm
    s。它们会根据您的模型自动验证输入,让您轻松保存模型,等等
  • 使用
    CreateView
    /
    UpdateView
    /
    FormView
    通用视图处理模型创建、更新、输入等。无需代码,只需配置
  • 不要自己做模板<代码>表单。as_p将为您提供一个裸体表单<代码>表单。您的_名称将呈现该字段,等等
只是一个合理的警告:这是干编码,所以可能有打字错误或其他小愚蠢

models.py forms.py views.py url.py home/name.html

{%csrf_令牌%}
{{form.as_p}}

您的模型和表单名称相同。因此,当您在视图中同时导入它们时,只使用最后一个(form类)。您没有使用
forms.ModelForm
,因此
Meta
类什么也不做。我这样做了,我得到了一个错误
“NameForm”对象没有属性“save”
,这可能是因为您将表单和模型命名为相同的名称,这是件坏事,很抱歉问。我现在应该换什么?我的表单或模型的名称?还可以查看@AKX comment,它应该继承自
forms.ModelForm
。您已经启动了它,在OP的问题中找到了所有问题。尊敬。
if form.is_valid():
    form.save()
    return HttpResponseRedirect('thanks/')
else:
    ...
from django.db import models

class NameModel(models.Model):
    your_name = models.CharField(max_length=200)
from django import forms

class NameForm(forms.ModelForm):
    class Meta:
        model = NameModel
        fields = ['your_name']
from django.views.generic import CreateView
from django.urls import reverse_lazy
from .models import NameModel
from .forms import NameForm

class NameView(CreateView):
    model_class = NameModel
    form_class = NameForm
    success_url = reverse_lazy('name-thanks')
    initial = {'your_name': 'value'}
    template_name = 'home/name.html'
from django.conf.urls import url
from django.views.generic import FormView

from .views import NameView

app_name = 'home'

urlpatterns = [
    url(r'^$', NameView.as_view(), name='name'),
    url(r'^your-name/thanks/$', TemplateView.as_view({'template_name': 'home/thanks.html'}), name='name-thanks'),
]
<form action="your-name/" method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="OK">
</form>