15325@qq.com
|
2.0/chapter06/#378 |
2009-11-13 16:58:59
|
注意Publication
date列头现在有一个小箭头显示排序。
|
|
15325@qq.com
|
2.0/chapter06/#377 |
2009-11-13 16:57:42
|
刷新book列表页面观看实际效果。
|
|
15325@qq.com
|
2.0/chapter06/#375 |
2009-11-13 16:56:56
|
如果要实现降序,仅需在传入的列表或元组的字段前加上一个减号(-)。
|
|
15325@qq.com
|
2.0/chapter06/#374 |
2009-11-13 16:54:51
|
这个<literal>ordering</literal>选项基本像模块中<literal>class Meta</literal>的<literal>ordering</literal>那样工作,除了它只用列表中的第一个字段名。
|
|
15325@qq.com
|
2.0/chapter06/#371 |
2009-11-13 16:44:59
|
列表页面默认按照模块<literal>class Meta</literal>(详见第五章)中的<literal>ordering</literal>所指的列排序。但目前没有指定<literal>ordering</literal>值,所以当前排序是没有定义的。
|
|
15325@qq.com
|
2.0/chapter06/#370 |
2009-11-13 16:41:25
|
最后,让我们改变默认的排序方式,按publication date降序排列。
|
|
15325@qq.com
|
2.0/chapter06/#368 |
2009-11-13 16:39:56
|
请注意,<literal>date_hierarchy</literal>接受的是<emphasis> 字符串</emphasis> ,而不是元组。因为只能对一个日期型字段进行层次划分。
|
|
15325@qq.com
|
2.0/chapter06/#366 |
2009-11-13 16:37:23
|
含date_hierarchy的book列表页面
|
|
15325@qq.com
|
2.0/chapter06/#365 |
2009-11-13 16:36:36
|
图 6-11.
|
|
15325@qq.com
|
2.0/chapter06/#361 |
2009-11-13 16:36:19
|
修改好后,页面中的列表顶端会有一个逐层深入的导航条,效果如图 6-11.
|
|
15325@qq.com
|
2.0/chapter06/#362 |
2009-11-13 16:35:16
|
它从可用的年份开始,然后逐层细分到月乃至日。
|
|
15325@qq.com
|
2.0/chapter06/#361 |
2009-11-13 16:16:25
|
修改好后,页面中的列表顶端会有一个逐层深入的导航条,效果如下:
|
|
15325@qq.com
|
2.0/chapter06/#361 |
2009-11-13 16:14:59
|
修改好后,页面中的列表顶端会有一个下拉的导航条,效果如下:
|
|
15325@qq.com
|
2.0/chapter06/#358 |
2009-11-13 16:12:41
|
另外一种过滤日期的方式是使用<literal>date_hierarchy</literal>选项,如:
|
|
15325@qq.com
|
2.0/chapter06/#356 |
2009-11-13 16:11:42
|
<literal> 过滤器</literal> 同样适用于其它类型的字段,而不单是<literal> 日期型</literal> (请在<literal> 布尔型</literal> 和<literal> 外键</literal> 字段上试试)。当有两个以上值时,过滤器就会显示。
|
|
15325@qq.com
|
2.0/chapter06/#354 |
2009-11-13 16:00:39
|
含过滤器的book列表页面
|
|
15325@qq.com
|
2.0/chapter06/#353 |
2009-11-13 15:57:58
|
图 6-10.
|
|
15325@qq.com
|
2.0/chapter06/#350 |
2009-11-13 15:53:11
|
图 6-10显示了修改后的页面。
|
|
15325@qq.com
|
2.0/chapter06/#349 |
2009-11-13 15:51:49
|
Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。
|
|
15325@qq.com
|
2.0/chapter06/#348 |
2009-11-13 15:41:26
|
然后,我们用<literal>list_filter</literal>这个字段元组创建过滤器,它位于列表页面的右边。
|
|
15325@qq.com
|
2.0/chapter06/#347 |
2009-11-13 15:38:23
|
由于我们要处理一系列选项,因此我们创建了一个单独的<literal>ModelAdmin</literal>类:<literal>BookAdmin</literal>。首先,我们定义一个<literal>list_display</literal>,以使得页面好看些。
|
|
15325@qq.com
|
2.0/chapter06/#342 |
2009-11-13 15:33:59
|
含search_fields的author列表页面
|
呼应前文“追加search_fields”
|
15325@qq.com
|
2.0/chapter06/#324 |
2009-11-13 15:32:50
|
弄好了这个东东,再刷新author列表页面,你会看到列表中有三列:姓氏、名字和邮箱地址。
|
|
15325@qq.com
|
2.0/chapter06/#344 |
2009-11-13 15:31:31
|
接下来,让我们为<literal>Book</literal>列表页添加一些过滤器。
|
|
15325@qq.com
|
2.0/chapter06/#342 |
2009-11-13 15:30:38
|
含查询框的author列表页面
|
|
15325@qq.com
|
2.0/chapter06/#341 |
2009-11-13 15:30:04
|
图 6-9.
|
|
15325@qq.com
|
2.0/chapter06/#338 |
2009-11-13 15:29:39
|
正如用户所希望的那样,它是大小写敏感,并且对两个字段检索的查询框。如果查询<literal>"bar"</literal>,那么名字中含有Barney和姓氏中含有Hobarson的作者记录将被检索出来。
|
|
15325@qq.com
|
2.0/chapter06/#337 |
2009-11-13 15:25:25
|
(见图6-9.)我们刚才所作的修改列表页面,添加了一个根据姓名查询的查询框。
|
|
15325@qq.com
|
2.0/chapter06/#336 |
2009-11-13 15:03:46
|
刷新浏览器,你会在页面顶端看到一个查询栏。
|
|
15325@qq.com
|
2.0/chapter06/#333 |
2009-11-13 15:02:37
|
向<literal>AuthorAdmin</literal>追加<literal>search_fields</literal>,如:
|
|
15325@qq.com
|
2.0/chapter06/#332 |
2009-11-13 14:58:53
|
接下来,让我们添加一个快速查询栏。
|
|
15325@qq.com
|
2.0/chapter06/#330 |
2009-11-13 14:57:57
|
修改后的author列表页面
|
|
15325@qq.com
|
2.0/chapter06/#329 |
2009-11-13 14:57:43
|
图 6-8.
|
|
15325@qq.com
|
2.0/chapter06/#329 |
2009-11-13 14:57:18
|
图 6-8. 修改过的author列表页面
|
|
15325@qq.com
|
2.0/chapter06/#326 |
2009-11-13 14:56:34
|
(参见图 6-8)
|
|
15325@qq.com
|
2.0/chapter06/#325 |
2009-11-13 14:56:09
|
另外,点击每个列的列头可以对那列进行排序。
|
|
15325@qq.com
|
2.0/chapter06/#324 |
2009-11-13 14:54:21
|
弄好了这个东东,再刷新author列表页面,你会看到列表中有三列:姓氏、名字和油箱地址。
|
严肃版:做好了这个类。。。
|
15325@qq.com
|
2.0/chapter06/#322 |
2009-11-13 14:47:59
|
如果你忽略第二个参数,Django将使用默认的选项。<literal>Publisher</literal>和<literal>Book</literal>的注册就属于这种情况。
|
|
15325@qq.com
|
2.0/chapter06/#321 |
2009-11-13 14:45:37
|
<literal>admin.site.register()</literal>函数接受一个<literal>ModelAdmin</literal>子类作为第二个参数。
|
|
15325@qq.com
|
2.0/chapter06/#319 |
2009-11-13 14:44:45
|
用<literal>AuthorAdmin</literal>选项注册<literal>Author</literal>模块。
|
|
15325@qq.com
|
2.0/chapter06/#318 |
2009-11-13 14:44:04
|
我们修改了<literal>admin.site.register()</literal>调用,在<literal>Author</literal>后面添加了<literal>AuthorAdmin</literal>。你可以这样理解:
|
|
15325@qq.com
|
2.0/chapter06/#316 |
2009-11-13 14:42:02
|
当然,这些字段名称必须是模块中有的。
|
|
15325@qq.com
|
2.0/chapter06/#316 |
2009-11-13 14:41:09
|
当然,这些字段名称必须是存在于模块中的。
|
|
15325@qq.com
|
2.0/chapter06/#315 |
2009-11-13 14:40:14
|
我们只自定义了一项:<literal>list_display</literal>, 它是一个字段名称的元组,用于列表显示。
|
|
15325@qq.com
|
2.0/chapter06/#315 |
2009-11-13 14:39:14
|
我们只自定义了一项:<literal>list_display</literal>, 它是一个字段名称的元组,用来显示列表头。
|
|
15325@qq.com
|
2.0/chapter06/#314 |
2009-11-13 14:35:38
|
我们新建了一个类<literal>AuthorAdmin</literal>,它是从<literal>django.contrib.admin.ModelAdmin</literal>派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。
|
|
15325@qq.com
|
2.0/chapter06/#312 |
2009-11-13 14:31:04
|
解释一下代码:
|
|
15325@qq.com
|
2.0/chapter06/#312 |
2009-11-13 14:30:07
|
代码解释如下:
|
|
15325@qq.com
|
2.0/chapter06/#309 |
2009-11-13 14:29:13
|
打开<literal>admin.py</literal>并修改:
|
|
15325@qq.com
|
2.0/chapter06/#305 |
2009-11-13 14:27:59
|
这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。
|
|