首页 > 代码库 > 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 效果见图,点击放大镜图标可以选择。