首页 > 代码库 > Django学习笔记(四)—— Admin

Django学习笔记(四)—— Admin

疯狂的暑假学习之  Django学习笔记(四)—— Admin


参考:《The Django Book》 第6章



Django 可以使用admin自动创建管理界面。


1. 配置


django-admin.py startproject 创建的项目,如果没有注解掉默认的配置,python manage.py syncdb 创建用户后,直接 http://xxxxxx/admin 输入密码即可进入。

如果修改了配置文件,保证将 django.contrib.admin 加入setting.py 中的INSTALLED_APPS中,

另外管理工具依赖 :  django.contrib.auth,

                                django.contrib.contenttypes,

                                django.contrib.sessions,

也应加入INSTALLED_APPS中。

还要确保MIDDLEWARE_CLASSES包含:django.contrib.sessions.middleware.SessionMiddleware,

                                                              django.middleware.common.CommonMiddleware,

                                                              django.contrib.auth.middleware.AuthenticationMiddleware。

还要在urls.py 中的patterns加上:url(r‘^admin/‘, include(admin.site.urls)),


登录的超级用户,可以在python manage.py syncdb后创建,也可以用 python manage.py createsuperuser 来创建超级用户。


2. 将Models加入Admin管理中


(如果按照上一篇继续做下去。)

在books文件夹中创建 admin.py,输入:


from django.contrib import admin

# Register your models here.
from books.models import *

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

你就可以看到下面界面:





点击模块进入看到的列表名称,默认是 __unicode__(self) 返回的字符串:




编辑,添加表单界面:




模块字段的名字默认,是把models.py 中的名字把 ‘_‘ 换成‘ ‘空格,然后首字母大写显示。 如果要自定义名字,定义字段时,加上verbose_name=‘XXXX‘:

例如:把 Email 改成 E-mail

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(blank=True,verbose_name='e-mail')

    def __unicode__(self):
        return u'%s %sAA' % (self.first_name, self.last_name)



3. 设置字段可选


默认编辑表单时,都不能为空

可以编辑models.py文件,在定义字段上加上blank = True。

改后,不填就保存为NULL。例子,上面的Author例子就是。

如果是日期型,数据型等不能为NULL的,需要加上那个 blank=True 与 null=True,两个。



4. 自定义ModelAdmin类


要修改模块内的东西就要自定义ModelAdmin类

把admin.py 改成下面


from django.contrib import admin

# Register your models here.
from books.models import *

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

class BookAdmin(admin.ModelAdmin):
    list_display = ('title','publisher','publication_date')
    list_filter = ('publication_date','publisher')
    search_fields = ('title',);
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('title','authors','publisher','publication_date')
    filter_horizontal = ('authors',)
    #filter_vertical = ('authors',)
    raw_id_fields = ('publisher',)

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




修改后的界面





说说改动的那些都有什么用。


添加的2个ModelAdmin类。它们是用来对模块实现自定义的。要在register中加入对应的ModelAdmin类。


其中:list_display用来表示模块界面中列表显示的字段的。

          search_fields用来在模块界面添加快速查询的

          list_filter  用来在模块界面添加 右边 的 过滤器的

          date_hierarchy  用来在模块界面顶部添加逐层深入的导航条

          ordering  用来设置模块界面显示的排序顺序


         fields 用来表示编辑表单界面各字段的顺序,也可以少些一些,用来屏蔽不让用户改的字段。

         filter_horizontal  效果直接见图,方便多选的。

         filter_vertical  与filter_horizontal一样,只不过是垂直显示的。

         raw_id_fields 效果见图,点击放大镜图标可以选择。