【发布时间】:2017-03-06 13:38:21
【问题描述】:
我在我的 Django 项目中使用一个表单来获取人们的姓名和电话号码以供以后联系。遵循了几个指南,包括 Django 文档,但它似乎不起作用。我的测试 POST 没有出现在 admin 中,也无法通过 manage.py shell 访问。我在代码中留下了多行注释,以显示我正在尝试的另一种方法,以防万一。在我的 manage.py 运行服务器日志中也没有出现错误。
表格:
from django import forms
class SubscribeForm(forms.Form):
name = forms.CharField(label='Your Name', max_length=100)
phone_number = forms.CharField(label='Phone Number', max_length=12, min_length=10)
模板:
<form action="/success/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
查看:
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from datetime import datetime
from .models import Person
from .forms import SubscribeForm
def home(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = SubscribeForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
p = form.save()
'''
name = form.cleaned_data['name']
number = form.cleaned_date['phone_number']
p = Person(name=name, phone_number=number, date_subscribed=datetime.now(), messages_recieved=0)
p.save()
'''
# redirect to a new URL:
return HttpResponseRedirect('/success/')
# if a GET (or any other method) we'll create a blank form
else:
form = SubscribeForm()
return render(request, 'texting/index.html', {'form': form})
我看了几个视频,阅读了很多 SO 页面,但似乎仍然无法正常工作。
【问题讨论】:
-
此代码会导致错误,因为普通的 Form 对象没有保存方法。由于您没有看到任何错误,因此您的表单必须无效或正在提交到不同的视图。
-
@DanielRoseman 谢谢丹尼尔,忽略了这一点。我的模板的操作是“/success/”,因此 POST 方法只运行视图“成功”中的代码(这只是一些说明它有效的文本)。因此,将我的模板操作更改为“/”(这是我编写代码的地方)会导致它保存。如果你想写它作为答案,我会接受它。
标签: django django-forms