zoukankan      html  css  js  c++  java
  • 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)

    显示如下:

    fieldsexclude:指定编辑表单需要编辑不需要编辑的字段

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

    如果对编辑的菜单做限制,比如值能编辑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

  • 相关阅读:
    document.createElement在IE和Firefox下的差异
    css3:基础知识
    XMLTProcessor根据XSLT样式规则将节点转换为document对象
    Sql:查看数据库表和表结构的语句
    前端性能优化方法总结
    vue-resource 设置请求的参数以formData形式以及设置请求的过滤器
    vuex
    vue 随笔3
    vuex
    vue随笔2
  • 原文地址:https://www.cnblogs.com/kindnull/p/8379798.html
Copyright © 2011-2022 走看看