疯狂的暑假学习之 Django学习笔记(四)—— Admin
参考:《The Django Book》 第6章
Django 可以使用admin自动创建管理界面。
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 来创建超级用户。
在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)
默认编辑表单时,都不能为空
可以编辑models.py文件,在定义字段上加上blank = True。
改后,不填就保存为NULL。例子,上面的Author例子就是。
如果是日期型,数据型等不能为NULL的,需要加上那个 blank=True 与 null=True,两个。
要修改模块内的东西就要自定义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 效果见图,点击放大镜图标可以选择。