双面Django第3部分:NewForms
Django(72), newforms(1)好吧,现在我们开始第三部分本教程。你应该有[从第二部分徘徊] [parttwo]。如果您不能通过以前的段工作,您可以[抓取我们当前设置的副本] [轮询2]我们在教程的第一个和第二部分组合在一起。
这段细分我们对我们的一点增加了一点核应用程序,但与前两个相比,它将是一个相对简短的细分市场,而且,对于这几乎没有比下四个更加简洁。好吧,让我们进入商业。
使用NewForms询问我们的用户问题
在我们的轮询项目,我们将允许用户创建新的民意调查,我们需要一个简单的方法来向我们的用户询问他们想要创建的轮询。一种简单的方法是使用django.newforms模块。
首先,导航到轮询项目目录,然后我们将制作一个新文件,核心/ form.py.py.,我们的表格居住。
Emacs核心/ forms.py
现在让我们将我们的导入添加到文件:
从django进口newforms.作为形式从polling.core.models.进口轮询
现在让我们把一个简单的形式放在一起,这将只有现场,要问的问题。它看起来像这样:
班级pollorm.(形式。形式):问题=形式。Charfield.(最长长度=200.)
好的,所以这是一个非常简单的例子(对不起!),但是我们想要更多地从中有点:我们想验证一个问题是唯一的,还是添加一个错误,如果不是,则会添加错误。通过添加方法来这样做clean_question到了pollorm.班级。感谢一点数图魔法,Django知道要查找该方法名称并调用它以额外验证问题字段。
我们要做的代码如下所示:
defclean_question(自己):问题=自己。cleaned_data.['问题']数数=轮询。对象。筛选(问题=问题)。数数()如果数数!=0.:增加形式。验证误合(“这个问题”%S.“ 已在使用中。'%问题)返回问题
而且,这真的是写表单。但我们做在继续前进之前,需要在一些测试。让我们前往我们的核心/ tests.py文件并将此行添加到我们的导入中:
从polling.core.forms.进口pollorm.
然后让我们制作一个新的unittest.testcase:
班级Coreformtest.(单元测试。测试用例):“测试”核心“应用程序中包含的表格。”deftest_pollform.(自己):经过
并确保工作......
Python Manage.py.测试
它确实如此,所以让我们填写* test_pollform * unittest。
deftest_pollform.(自己):F=pollorm.()自己。assertequals.(错误的那F。已验证())数据={}F=pollorm.(数据)自己。assertequals.(错误的那F。已验证())自己。assertequals.([你是必需的。“],F。错误['问题'])数据={“问题”:“这有效吗?”}F=pollorm.(数据)自己。assertequals.(真的那F。已验证())自己。assertequals.(“这有效吗?”那F。cleaned_data.['问题'])你=用户(名称=“会l”)你。保存()P.=轮询(问题=“这是真的吗?”那创造者=你)P.。保存()数据={“问题”:“这是真的吗?”}F=pollorm.(数据)#应该是假的,因为轮询这个问题已经#存在于我们的数据库中自己。assertequals.(错误的那F。已验证())自己。assertequals.([你的问题“是真的吗?”已在使用中。'],F。错误['问题'])P.。删除()你。删除()
像我们之前的测试一样,我们从一些理智检查开始,以确保我们知道我们正在做的事情,并且Django没有完全翻阅我们。在感觉好一点之后,我们在测试时,我们的表格在我们希望它的情况下是有效的,并且还有无效,并且还报告了我们期望的错误消息。
所以,让我们运行这些测试......
Python Manage.py.测试
看起来我们仍然是金色的。优秀的。
下一步
现在我们将这种形式放在一起,我们准备开始建立实际内容网页和FB.应用。此处提供了[项目当前状态的压缩代码] [轮询3]和当您准备好时,沿着第四段移动。