django的admin的基础配置和使用

django admin是django自带的一个后台app,提供了后台的管理功能

基础知识点:

 

一、认识ModelAdmin
管理界面的定制类,如需扩展特定的model界面需要从该类继承

默认情况下出版商显示界面如下:

仅仅显示出版商的名字,而出版商的其他信息,比如城市、省份、国家、网址这些都没有显示,如果要显示后面这些,我们可以进行如下操作:

在admin.py中定义一个出版社的管理类PublisherAdmin,然后继承admin.ModelAdmin类,实现代码如下:

class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','country','state_province','city',)

解析:这个代码的意思除了定义出版社管理类并继承admin.ModelAdmin,通过admin.ModelAdmin的list_display属性值定义要显示的部分(name、country、state_province、city),这样就完成的了要显示字段的设置。刷新页面。

发现页面没有出现我们预期的定义效果,为什么呢?
仔细看下该代码:
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','country','state_province','city',)
发现这里仅仅是定义了类,而没有做任何注册操作。不把定义model类PublisherAdmin注册到django原生中admin类中是不能显示的,那怎么办呢?

二、注册model类到admin的两种方式:

1、使用register的方法(这里用出版商Publisher的类为例)

from django.contrib import admin
from hello.models import *
# Register your models here.
#定义一个出版商管理类PublisherAdmin,然后继承admin.ModelAdmin,最后将定义的出版商管理类注册到admin.site.register中
class PublisherAdmin(admin.ModelAdmin):
          list_display = ('name','country','state_province','city',)
admin.site.register(Author)
admin.site.register(AuthorDetail)
admin.site.register(Book)
admin.site.register(Publisher,PublisherAdmin)

刷新页面出现如下界面:

 

当然显示字段是以英文出现的,这里我们可以去models.py中修改,具体通过修改属性字段verbose_name的值来操作,默认是英文,修改如下:

class Publisher(models.Model):
name = models.CharField(max_length=30, verbose_name="名称")
address = models.CharField("地址", max_length=50)
city = models.CharField("城市",max_length=60)
state_province = models.CharField("省份",max_length=30)
country = models.CharField("国家",max_length=50)
website = models.URLField("网址",)


2、使用register的装饰器

通过装饰器将定义的出版商类Publisher注册到admin.register中,同时注释掉#admin.site.register(Publisher,PublisherAdmin)

from django.contrib import admin
from hello.models import *
# Register your models here.
@admin.register(Publisher) 
class PublisherAdmin(admin.ModelAdmin):
        list_display = ('name','country','state_province','city',)
admin.site.register(Author)
admin.site.register(AuthorDetail)
admin.site.register(Book)
#admin.site.register(Publisher,PublisherAdmin)

      方法1和2效果一样,但是方法2相对简单一点

三、掌握一些常用的设置技巧

list_display:指定要显示的字段
search_fields:指定搜索的字段
list_filter:指定列表过滤器
ordering:指定排序字段

from django.contrib import admin
from hello.models import *
# Register your models here.
@admin.register(Publisher)
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','country','state_province','city',)
search_fields = ('name',)
list_filter= ('city',)
ordering=('id')
admin.site.register(AuthorDetail)
admin.site.register(Book)

显示如下:

 

fields\exclude:指定编辑表单需要编辑\不需要编辑的字段

默认的是把所有的表单信息都可以进行编辑,如下所示:

如果对编辑的菜单做限制,比如值能编辑name和address字段,可以进行这样设置:

from django.contrib import admin
from hello.models import *
# Register your models here.
@admin.register(Publisher)
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','country','state_province','city',)
search_fields = ('name',)
list_filter= ('city',)
fields = ('name','address')

 刷新页面效果就如下所示

如果对不编辑的菜单做限制,可以用exclude,这里把fields注释,用exclude来设置,出现效果刚好相反

from django.contrib import admin
from hello.models import *
# Register your models here.
@admin.register(Publisher)
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','country','state_province','city',)
search_fields = ('name',)
list_filter= ('city',)
#fields = ('name','address')
exclude = ('name','address',)

 

fieldsets:设置分组表单


更多高级使用的功能将在《Django进阶》课程里介绍,另外,值得注意的是,django admin更适合开发人员来使用,最终用户来使用的话用户体验还不是很好
https://docs.djangoproject.com/en/1.9/ref/contrib/admin

posted @ 2018-01-29 22:31  kindnull  阅读(270)  评论(0编辑  收藏  举报