IIssNan
|
2.0/chapter07/#204 |
2009-11-11 15:42:12
|
最后,我们再稍微改进一下这个表单,去掉冗余的部分。
|
|
15325@qq.com
|
2.0/chapter06/#218 |
2009-11-11 15:40:02
|
在SQL中, <literal>NULL</literal>的值不同于空字符串,就像Python中<literal>None</literal>不同于空字符串(<literal>""</literal>)一样。这意味着某个字符型字段(如<literal>VARCHAR</literal>)的值不可能同时包含<literal>NULL</literal>和空字符串。
|
|
15325@qq.com
|
2.0/chapter06/#218 |
2009-11-11 15:39:45
|
在SQL中, <literal>NULL</literal>的值不同于空字符串,就像Python中<literal>None</literal>不同于空字符串(<literal>""</literal>)一样。这意味着某个字符型字段(如<literal>VARCHAR</literal>)不可能同时包含<literal>NULL</literal>和空字符串。
|
|
IIssNan
|
2.0/chapter07/#202 |
2009-11-11 15:36:00
|
最后,若用户提交了一个非空的值,那么他将看到搜索结果。
|
|
IIssNan
|
2.0/chapter07/#201 |
2009-11-11 15:35:16
|
如果用户提交了一个空表单,那么它将看到错误提示信息,还有表单;
|
|
15325@qq.com
|
2.0/chapter06/#216 |
2009-11-11 15:34:58
|
SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的含义。
|
|
IIssNan
|
2.0/chapter07/#200 |
2009-11-11 15:34:26
|
在改进后的视图中,若用户访问/search/并且没有带有GET数据,那么他将看到一个没有错误信息的表单;
|
|
15325@qq.com
|
2.0/chapter06/#214 |
2009-11-11 15:31:26
|
虽然<literal>blank=True</literal>同样适用于日期型和数字型字段,但是这里需要详细讲解一些背景知识。
|
|
IIssNan
|
2.0/chapter07/#197 |
2009-11-11 15:30:32
|
所以,只要我们改变search()视图:当用户访问/search/并未提交任何数据时就隐藏错误信息,这样就移去search_form()视图以及对应的URLpattern。
|
|
IIssNan
|
2.0/chapter07/#196 |
2009-11-11 15:28:19
|
按实际情况来说,当一个请求发送至/search/(未包含GET的数据)后将会显示一个空的表单(带有错误信息)。
|
|
IIssNan
|
2.0/chapter07/#195 |
2009-11-11 15:26:15
|
是否有必要专门编写search_form()来显示表单?
|
|
IIssNan
|
2.0/chapter07/#194 |
2009-11-11 15:20:44
|
通过上面的一些修改,现在程序变的好多了,但是现在出现一个问题:
|
|
IIssNan
|
2.0/chapter07/#192 |
2009-11-11 15:19:00
|
我们修改了search_form()视图所使用的模板,因为search_form()视图没有传递error变量,所以在条用search_form视图时不会显示错误信息。
|
|
15325@qq.com
|
2.0/chapter06/#212 |
2009-11-11 15:18:29
|
设置日期型和数字型字段可选
|
|
15325@qq.com
|
2.0/chapter06/#210 |
2009-11-11 15:17:51
|
现在你可以添加一个作者而不必输入邮箱地址,即使你为这个字段提交了一个空值,也再不会得到那刺眼的红色信息“This field is required”。
|
|
15325@qq.com
|
2.0/chapter06/#209 |
2009-11-11 15:14:01
|
这意味它不是一个必填字段。
|
|
15325@qq.com
|
2.0/chapter06/#208 |
2009-11-11 15:12:29
|
当你添加<literal>blank=True</literal>以后,刷新页面Add author edit form
(<literal>http://127.0.0.1:8000/admin/books/author/add/</literal> ),将会发现Email的标签不再是粗体了。
|
|
15325@qq.com
|
2.0/chapter06/#206 |
2009-11-11 15:10:21
|
<literal>email</literal>不但展现为一个数据库中的<literal>VARCHAR</literal>类型的字段,它还是页面中可选的字段,就像在管理工具中看到的那样。
|
|
IIssNan
|
2.0/chapter07/#189 |
2009-11-11 15:08:35
|
现在我们编辑一下search_form.html,检测变量error:
|
|
15325@qq.com
|
2.0/chapter06/#205 |
2009-11-11 15:06:56
|
现在,我们的模块类开始成为一个富含<literal>Author</literal>对象属性和行为的集合了。
|
|
15325@qq.com
|
2.0/chapter06/#204 |
2009-11-11 15:03:53
|
在添加<literal>blank=True</literal>过程中,我们已经开始在简单的定义数据表上扩展我们的模块了。
|
|
15325@qq.com
|
2.0/chapter06/#203 |
2009-11-11 15:01:54
|
直到现在,除了<literal>__unicode__()</literal>方法,我们的模块充当数据库中表定义的角色,即本质上是用Python的语法来写<literal>CREATE TABLE</literal>语句。
|
|
15325@qq.com
|
2.0/chapter06/#202 |
2009-11-11 14:54:46
|
这里会发生一些有趣的事情。
|
|
15325@qq.com
|
2.0/chapter06/#200 |
2009-11-11 14:53:21
|
所有字段都默认<literal>blank=False</literal>,这使得它们不允许输入空值。
|
|
15325@qq.com
|
2.0/chapter06/#199 |
2009-11-11 14:51:49
|
这些代码告诉Django,作者的邮箱地址允许输入一个空值。
|
|
15325@qq.com
|
2.0/chapter06/#196 |
2009-11-11 14:49:36
|
为了指定<literal>email</literal>字段为可选,你只要编辑<literal>Book</literal>模块(回想第五章,它在<literal>mysite/books/models.py</literal>文件里),在<literal>email</literal>字段上加上<literal>blank=True</literal>。代码如下:
|
|
15325@qq.com
|
2.0/chapter06/#194 |
2009-11-11 14:43:56
|
在现实世界中,你可能没有为每个作者登记邮箱地址。
|
|
15325@qq.com
|
2.0/chapter06/#190 |
2009-11-11 14:42:37
|
设置字段可选
|
|
15325@qq.com
|
2.0/chapter06/#192 |
2009-11-11 14:42:27
|
在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。
|
|
15325@qq.com
|
2.0/chapter06/#193 |
2009-11-11 14:42:05
|
举个例子,我们想要<literal>Author</literal>模块中的<literal>email</literal>字段成为可选,即允许不填。
|
|
15325@qq.com
|
2.0/chapter06/#192 |
2009-11-11 14:39:30
|
在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可填可不填的。
|
|
15325@qq.com
|
2.0/chapter06/#192 |
2009-11-11 14:39:05
|
在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,即使在有些情况下你想要某些字段是可填可不填的。
|
|
15325@qq.com
|
2.0/chapter06/#190 |
2009-11-11 14:33:26
|
设置字段可选项
|
|
15325@qq.com
|
2.0/chapter06/#188 |
2009-11-11 14:32:36
|
(如果你确实想浏览Django管理工具的代码,请谨记它在读取关于模块的元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)
|
|
IIssNan
|
2.0/chapter07/#500 |
2009-11-11 14:32:19
|
我们还可以把 <literal>form.message.errors</literal> 当作一个布尔值或者当它是list在上面做迭代,
|
|
IIssNan
|
2.0/chapter07/#501 |
2009-11-11 14:32:01
|
例如:
|
|
IIssNan
|
2.0/chapter07/#511 |
2009-11-11 14:31:28
|
在学习本书的前面七章后,我们终于对于使用Django构建自己的网站已经知道的够多了,
|
|
IIssNan
|
2.0/chapter07/#514 |
2009-11-11 14:29:03
|
第八章我们将回头、并深入地讲解 视图和URLconfs(第三章已简单介绍)。
|
|
15325@qq.com
|
2.0/chapter06/#187 |
2009-11-11 14:26:01
|
你可以在Django基本代码中的<literal>django/contrib/admin</literal> 目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。
|
|
IIssNan
|
2.0/chapter07/#188 |
2009-11-11 14:25:56
|
并且给这个模板传递了一个变量error,记录着错误提示信息。
|
|
IIssNan
|
2.0/chapter07/#187 |
2009-11-11 14:24:55
|
这段代码里,我们改进来search()视图:在字符串为空时重新显示search_form.html。
|
|
IIssNan
|
2.0/chapter07/#185 |
2009-11-11 14:21:53
|
(注意,将search_form()视图也包含进来以便查看)
|
|
IIssNan
|
2.0/chapter07/#182 |
2009-11-11 14:21:04
|
最简单的实现方法既是添加else分句重新显示表单,代码如下:
|
|
IIssNan
|
2.0/chapter07/#181 |
2009-11-11 14:20:08
|
在检测到空字符串时更好的解决方法是重新显示表单,并在表单上面给出错误提示以便用户立刻重新填写。
|
|
15325@qq.com
|
2.0/chapter06/#185 |
2009-11-11 14:19:44
|
综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。
|
|
15325@qq.com
|
2.0/chapter06/#186 |
2009-11-11 14:19:23
|
你要像添加自己的视图一样,把它添加到URLconf里面。
|
|
IIssNan
|
2.0/chapter07/#179 |
2009-11-11 14:16:01
|
这种做法既糟糕又不专业。如果在现实的案例中,我们这样子编写,那么Django的优势将荡然无存。
|
|
IIssNan
|
2.0/chapter07/#178 |
2009-11-11 14:14:49
|
若用户要重新填写表单必须自行点击“后退”按钮,
|
|
IIssNan
|
2.0/chapter07/#177 |
2009-11-11 14:12:12
|
首先,search()视图对于空字符串的处理相当薄弱——仅显示一条"Please submit a search term."的提示信息。
|
|
15325@qq.com
|
2.0/chapter06/#182 |
2009-11-11 14:12:11
|
应用程序<literal> django.contrib.auth</literal> 包含自身的<literal> admin.py</literal> ,所以Users和Groups能在管理工具中自动显示。
|
|