Django:将表单数据保存到数据库

Django:将表单数据保存到数据库,django,django-forms,Django,Django Forms,我在Django项目中使用了一个表单来获取人们的姓名和电话号码,以便以后联系。遵循了包括Django文档在内的多个指南,但似乎不起作用。我的测试帖子没有出现在admin中,也无法通过manage.py shell访问。我在代码中留下了多行注释,以显示我正在尝试的另一种方法,以防万一。也不会在manage.py运行服务器日志中引发错误 表格: 模板: <form action="/success/" method="post"> {% csrf_token %} {{ form

我在Django项目中使用了一个表单来获取人们的姓名和电话号码,以便以后联系。遵循了包括Django文档在内的多个指南,但似乎不起作用。我的测试帖子没有出现在admin中,也无法通过manage.py shell访问。我在代码中留下了多行注释,以显示我正在尝试的另一种方法,以防万一。也不会在manage.py运行服务器日志中引发错误

表格:

模板:

<form action="/success/" method="post">
  {% csrf_token %}
  {{ form }}
  <input type="submit" value="Submit" />
</form>
我看了好几个视频,读了好几页,但似乎还是不起作用。

试试这个:

...
if form.is_valid():
    name = form.cleaned_data['name']
    number = form.cleaned_data['phone_number']
    p = Person(name=name, phone_number=number, date_subscribed=datetime.now(), messages_received=0)
    p.save()
...
不需要执行form.save()步骤

预计到达时间:

您还可以尝试使用ModelForm和一些默认值或自定义保存方法,如下所示:

class Person(models.Model):
    name = models.CharField(max_length=96)
    phone_number = models.CharField(max_length=12)
    date_subscribed = models.DateTimeField(default=datetime.now())
    messages_received = models.IntegerField(default=0)

from django.forms import ModelForm

class SubscribeForm(ModelForm):
    class Meta:
        model = Person
        exclude = ('date_subscribed','messages_received')
如果使用ModelForm,则只需使用form.save()即可

p = Person(name=name, 
           phone_number=number, 
           date_subscribed=datetime.now(), 
           messages_received=0)
p.save()
删除这两行。 增加如下:

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','YourProjectName.settings')

import django
django.setup()

Person.objects.get_or_create()

此代码将导致错误,因为普通表单对象没有save方法。由于您没有看到任何错误,您的表单必须无效或提交到其他视图中。@DanielRoseman感谢Daniel,忽略了这一点。我的模板的操作是“/success/”,因此POST方法只运行“success”视图中的代码(这只是一些说明它工作的文本)。因此,将我的模板操作更改为“/”(我编写代码的地方)会导致它保存。如果你想把它写下来作为答案,我会接受的。我把它留在里面是因为我试过了,但它不起作用。你可能想看看如何创建一个模型表单。原因是您无法编辑或添加任何所需文件中的数据
p = Person(name=name, 
           phone_number=number, 
           date_subscribed=datetime.now(), 
           messages_received=0)
p.save()
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','YourProjectName.settings')

import django
django.setup()

Person.objects.get_or_create()