一、django.contrib包
django.contrib是一套庞大的功能集。django自带许多功能插件,他们都存在于contrib包里。
二、激活管理界面
1、修改setting.py 文件:
1)将django.contrib.admin 加入setting的INSTALLED-APPS中
2)保证INSTALLED_APPS中包含'django.contrib.auth','django.contrib.contenttypes'和'django.contrib.sessions'
3)保证MIDDLEWARE_CLASSES包含'django.middleware.common.CommonMiddleware' 、'django.contrib.sessions.middleware.SessionMiddleware' 和'django.contrib.auth.middleware.AuthenticationMiddleware' 。
2、运行python manage.py syncdb. 这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么做,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin (提醒一句: 只有当INSTALLED_APPS包含'django.contrib.auth'时,python manage.py createsuperuser这个命令才可用.)
3、修改urls.py 将admin访问配置在urls.py中。确保在urls.py 中存在以下内容:
# Include these import statements...
from django.contrib import admin
admin.autodiscover()
# And include this URLpattern...
urlpatterns = patterns('',
# ...
(r'^admin/', include(admin.site.urls)),
# ...
)
好了,现在可以运行admin配置了。在浏览器输入:
http://127.0.0.1:8000/admin/
三、使用管理工具
修改语言:
在setting.py 文件中的MIDDLEWARE_CLASSES中添加:‘django.middleware.locale.LocaleMiddleware’,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’之后.
四、将Models添加到管理界面
在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)
退出admin重新登录,发现包含一个Books区域,包含Publisher、Author、Book。
五、设置字段可选
在默认情况下,admin管理界面中表单的每个属性都必须填写,如果想实现某些字段是可选的,需要修改models.py 文件。例如我们修改Author的email字段为可选的,在email字段添加blank = True.重新登录admin后发现email已经不是粗体了,这时候可以不填写email也能保存了。
在设置日期型和数字型字段可选的时候,需要 同时修改为:blank = True, null = True 。添加null=True比添加blank=True复杂。因为null=True改变了数据的语义,即改变了CREATE TABLE语句,Django不会尝试自动更新数据库结构。所以你必须执行ALTER TABLE语句将模块的改动更新至数据库。
六、自定义字段标签
在admin界面看到的字段的名字都是从models.py文件中你定义的字段名演变过来的:下划线用空格代替;字段首字母大写。如果你想自己定义字段在admin中的显示内容,只需在模块定义中指定verbose_name:
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')
这时在admin管理界面中看到的email名称为:E-mail。你不用手动将verbose_name指定的值首字母大写,因为django会自动将其大写。
为了语法简洁,可以把它当做固定位置的参数传递:
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField( 'e-mail', blank = True)
默认的第一个参数就是这个字段在admin管理界面中显示的名称,但是对于ManyToManyField 和ForeignKey字段这种方式不适合,因为他们的第一个参数必须是模块类,这样就必须显式指定verbose_name的值。
七、自定义ModelAdmin类
上述的改变都是在模式级别而不是管理级别的,下面我们针对特别的模块自定义管理工具。
1、自定义列表
Author显示的列名是你在model定义中通过def__unicode__(self)函数指定的列名。
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
我们可以在这个基础上添加其他的显示字段,为了实现这个目的,我们为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)
注意:class一定要顶格写!
这样admin管理界面将会显示first_name、last_name、email三列信息.
代码分析:
新建一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,它保存着一个类的自定义配置。在这里它之定义了一个list_display,是一个字段名称的元组,用于列表显示。然后修改admin.site.register调用。
同理修改Publisher:
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name', 'address', 'city', 'country', 'website')
admin.site.register(Publisher, PublisherAdmin)
修改Book:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
admin.site.register(Book, BookAdmin)
注意,在Book中不能使用authors字段,因为它是一对多的关系。如果使用了authors字段会报错:
2、添加快速查询栏和过滤器
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',)
为Author添加快速查询栏,按照first_name和last_name查询,并且大小写不敏感。
按照publication_date进行过滤,它位于列表页面的右边。 Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。
过滤器还适用于其他类型,不单单是日期类型,当有两个值以上时就会显示过滤器。如我按照Publisher进行过滤:
另外一种过滤日期的方式是,使用date_hierarchy = 'publisher_date'
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
date_hierarchy = 'publication_date'
此时会在列表顶端有个逐层深入的导航条,从可用年份开始直至日。
请注意,date_hierarchy接受的是字符串,而不是元组。因为只能对一个日期型字段进行层次划分。
4、修改默认排序
默认排序是按照
class Meta:
ordering = ['name']
中定义的排序规则。下面修改Book的默认排序由title改为publication_date
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
date_hierarchy = 'publication_date'
ordering = ('publication_date',)
此时打开Books,会发现在title右侧有个小三角符号,表明现在是按照publication_date进行排序。
八、自定义编辑表单
1、以Book为例,默认的编辑表单页面如下:
我们可以改变字段的显示顺序,以及哪些字段能显示,哪些不会显示。例如,我们不想让用户编辑出版日期,就可以不让这个字段显示出来。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
date_hierarchy = 'publication_date'
ordering = ('publication_date',)
fields = ('title', 'authors', 'publisher')
此时的编辑界面为:
当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将publication_date设置为None,以确保这个字段满足null=True的条件。
2、修改多对多选框
默认的多对多选框为:
需要按住Ctrl,如果项目比较多,会非常不方便,现在提供一种新的方式:filter_horizontal = ('authors',)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
date_hierarchy = 'publication_date'
ordering = ('publication_date',)
fields = ('title', 'authors', 'publisher')
filter_horizontal = ('authors',)
这种多选的方式比较方便。还可以设置filter_vertical = ('authors',),它是按照竖排排列
filter_horizontal、filter_vertical都只能用在多对多的字段上。对于外键,可以使用raw_id_fields
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
date_hierarchy = 'publication_date'
ordering = ('publication_date',)
fields = ('title', 'authors', 'publisher')
filter_horizontal = ('authors',)
raw_id_fields = ('publisher',)
在这个输入框中,你输入什么呢? publisher的数据库ID号。 考虑到人们通常不会记住这些数据库ID,管理工具提供了一个放大镜图标方便你输入。点击那个图标将会弹出一个窗口,在那里你可以选择想要添加的publishe。
九、权限的管理
可以对一些用户 的使用权限进行设置。
本文为Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_eliot/article/details/8951808