Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166387
  • 博文数量: 73
  • 博客积分: 3106
  • 博客等级: 中校
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-11 22:57
文章分类

全部博文(73)

文章存档

2018年(2)

2016年(1)

2012年(8)

2011年(21)

2010年(41)

我的朋友

分类: Python/Ruby

2010-09-29 11:05:11

激活管理界面:
  • django.contrib 包:django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,管理工具是django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin。 django.contrib中其它可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话 (django.contrib.sessioins)以及用户评注系统(django.contrib.comments)。
  • 对settings文件做如下这些改变:
      1)将'django.contrib.admin'加入setting的INSTALLED_APPS配置中,INSTALLED_APPS中的配置顺
         序是没有关系的。
      2)保证INSTALLED_APPS中包含'django.contrib.auth''django.contrib.contenttypes'
          'django.contrib.sessions'
,Django的管理工具需要这3个包。
      3)确保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware'
          'django.contrib.sessions.middleware.SessionMiddleware'

          'django.contrib.auth.middleware.AuthenticationMiddleware'

  • 运行 python manage.py syncdb 。这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么作,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin。
  • 将admin访问配置在URLconf(记住,在urls.py中). 默认情况下,命令django-admin.py startproject生成的文件urls.py是将Django admin的路径注释掉的,你所要做的就是取消注释:

(r'^admin/', include(admin.site.urls)),

  • 启动开发服务器(如前:"python manage.py runserver 0.0.0.0:8000" ),然后在浏览器中访问:
管理界面操作:
  • 将Models加入到Admin管理中:继续第五章中的“book”例子。在其中,定义了三个模块: PublisherAuthorBook。在“books”目录下(“mysite/books”),创建一个文件:“admin.py”,然后输入以下代码:

from django.contrib import admin
from mysite.books.models import Publisher,Author,Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

  • 设置字段可选:想要Author模块中的email字段成为可选,即允许不填,你只要编辑Book模块(它在mysite/books/models.py文件里),在email字段上加上blank=True。代码如下:

email = models.EmailField(blank=True)

     
      为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL。在管理工具中,如
      果你留空一个字符型字段,它会为此插入一个空字符串(而* 不是*NULL)。但是,其它数据类型有例
      外:日期型、时间型和数字型字段不接受空字符串。因此,如果你想允许一个日期型(DateField
       TimeField
DateTimeField)或数字型(IntegerFieldDecimalFieldFloatField)字段为空,你需
      要使用null=Trueblank=True

publication_date = models.DateField(blank=True, null=True)

      要完成这些改动,还需要更新数据库。出于某种原因,Django不会尝试自动更新数据库结构。所以你
      必须执行ALTER TABLE语句将模块的改动更新至数据库。可以使用manage.py dbshell进入数
      据库服务环境。 以下是在这个特殊情况下如何删除NOT NULL:

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

注意:以上SQL语法是PostgreSQL特有的。
  • 自定义字段标签:在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。例如:Book模块中publication_date的标签是Publication date。将Author.email的标签改为e-mail,中间有个横线:

email = models.EmailField(blank=True, **verbose_name='e-mail'** )

      注:Django会自动适时将首字母大写,并且在其它不需要大写的地方使用verbose_name的精确值。
      为了使语法简洁,你可以把它当作固定位置的参数传递,但这不适用于ManyToManyFieldForeignKey
      字段,因为它们第一个参数必须是模块类。

email = models.EmailField(**'e-mail',** blank=True)


  • 自定义ModelAdmi类:为Author模块定义一个ModelAdmin类。打开admin.py并修改:

from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

**class AuthorAdmin(admin.ModelAdmin):**
    **list_display = ('first_name', 'last_name', 'email')**

admin.site.register(Publisher)
**admin.site.register(Author, AuthorAdmin)**
admin.site.register(Book)

      接下来,添加一个快速查询栏。 向AuthorAdmin追加search_fields,如:

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'email')
    **search_fields = ('first_name', 'last_name')**

     为Book列表页添加一些过滤器:

**class BookAdmin(admin.ModelAdmin):**
    **list_display = ('title', 'publisher', 'publication_date')**
    **list_filter = ('publication_date',)**

admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
**admin.site.register(Book, BookAdmin)**

   另外一种过滤日期的方式是使用date_hierarchy选项,如:

class BookAdmin(admin.ModelAdmin):
    ... ...
    date_hierarchy = 'publication_date'

   最后,让我们改变默认的排序方式,按publication date降序排列。 列表页面默认按照模块class
    Meta
中的ordering所指的列排序。但目前没有指定ordering值,所以当前排序是没有定义的。

class BookAdmin(admin.ModelAdmin):
    ... ...
    ordering = ('-publication_date',)

  • 自定义编辑表单:默认地,表单中的字段顺序是与模块中定义是一致的。 我们可以通过使用ModelAdmin子类中的fields选项来改变它:

class BookAdmin(admin.ModelAdmin):
    ... ...
    fields = ('title', 'authors', 'publisher')

     通过fields这个选项,你可以排除一些不想被其他人编辑的fields 只要不选上不想被编辑的
     field(s)即可。当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将
      publication_date
设置为None,以确保这个字段满足null=True的条件。
     另一个常用的编辑页面自定义是针对多对多字段的,使用filter_horizontal,odelAdmin类还支持
      filter_vertical
选项。它像filter_horizontal那样工作,除了控件都是垂直排列,不是水平排列的:

class BookAdmin(admin.ModelAdmin):
    ... ...
    filter_horizontal = ('authors',)

    filter_horizontalfilter_vertical选项只能用在多对多字段 上, 而不能用于ForeignKey字段。解决这个问题的办法是使用“raw_id_fields”选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成“文本框”,而不再是“下拉框”:

class BookAdmin(admin.ModelAdmin):
    ... ...
    raw_id_fields = ('publisher',)


阅读(2666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~