Admin站点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Admin站点相关的知识,希望对你有一定的参考价值。

Admin站点

内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块,在Django项目中默认启用Admin管理站点准备工作:创建管理员的用户名和密码。

技术分享View Code

按提示填写用户名、邮箱、密码

技术分享

使用:在应用的admin.py中注册模型类例,打开booktest/admin.py文件,注册地区模型

技术分享View Code

输入如下网址 

技术分享View Code

按提示填写用户名、密码,点击“Log in”按钮登录

登录成功后,可以看到AreaInfos,可以进行增加、修改、删除、查询的管理

技术分享

列表页显示效果如下图:

技术分享

控制管理页展示

  • 类ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式
  • 在booktest/admin.py中,注册模型类前定义管理类AreaAdmin
技术分享View Code

管理类有两种使用方式

  • 注册参数
  • 装饰器

注册参数:打开booktest/admin.py文件,注册模型类代码如下

admin.site.register(AreaInfo,AreaAdmin)

  

装饰器:打开booktest/admin.py文件,在管理类上注册模型类,代码如下

技术分享View Code

接下来介绍如何控制列表页、增加修改页展示效果:

列表页选项:

页大小

  • 每页中显示多少条数据,默认为每页显示100条数据,属性如下
list_per_page=100

  

打开booktest/admin.py文件,修改AreaAdmin类如下:

class AreaAdmin(admin.ModelAdmin):
    list_per_page = 10

 

在浏览器中查看区域信息的列表页面,效果如下图

技术分享

“操作选项”的位置

  • 顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True
actions_on_top=True
  • 底部显示的属性,设置为True在底部显示,设置为False不在底部显示,默认为False
actions_on_bottom=False

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    actions_on_top = True

在浏览器中刷新效果如下图:

技术分享

列表中的列

  • 属性如下
list_display=[模型字段1,模型字段2,...]
  • 打开booktest/admin.py文件,修改AreaAdmin类如下
class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = [‘id‘,‘atitle‘]

在浏览器中刷新效果如下图:

技术分享

点击列头可以进行升序或降序排列

将方法作为列

  • 列可以是模型字段,还可以是模型方法,要求方法有返回值
  • 打开booktest/models.py文件,修改AreaInfo类如下
class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle

  

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = [‘id‘,‘atitle‘,‘title‘]

在浏览器中刷新效果如下图

技术分享

  • 方法列是不能排序的,如果需要排序需要为方法指定排序依据
admin_order_field=模型类字段

打开booktest/models.py文件,修改AreaInfo类如下

class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle
    title.admin_order_field=‘atitle‘

在浏览器中刷新效果如下图

技术分享

列标题
  • 列标题默认为属性或方法的名称,可以通过属性设置
  • 需要先将模型字段封装成方法,再对方法使用这个属性,模型字段不能直接使用这个属性
short_description=‘列标题‘

打开booktest/models.py文件,修改AreaInfo类如下

class AreaInfo(models.Model):
    ...
    title.short_description=‘区域名称‘
class AreaInfo(models.Model):
    ...
    title.short_description=‘区域名称‘

在浏览器中刷新效果如下图

技术分享

关联对象
  • 无法直接访问关联对象的属性或方法,可以在模型类中封装方法,访问关联对象的成员
  • 打开booktest/models.py文件,修改AreaInfo类如下
技术分享View Code

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = [‘id‘,‘atitle‘,‘title‘,‘parent‘]

在浏览器中刷新效果如下图

技术分享

右侧栏过滤器

  • 属性如下,只能接收字段,会将对应字段的值列出来,用于快速过滤
list_filter=[]
  • 一般用于有重复值的字段
  • 打开booktest/admin.py文件,修改AreaAdmin类如下
class AreaAdmin(admin.ModelAdmin):
    ...
    list_filter=[‘atitle‘]

在浏览器中刷新效果如下图

技术分享

搜索框

  • 属性如下,用于对指定字段的值进行搜索,支持模糊查询
search_fields=[]
  • 列表类型,表示在这些字段上进行搜索
  • 打开booktest/admin.py文件,修改AreaAdmin类如下
class AreaAdmin(admin.ModelAdmin):
    ...
    search_fields=[‘atitle‘]

在浏览器中刷新效果如下图

技术分享

中文标题

  • 打开booktest/models.py文件,修改模型类,为属性指定verbose_name参数,即第一个参数
class AreaInfo(models.Model):
    atitle=models.CharField(‘标题‘,max_length=30)#名称

在浏览器中刷新效果如下图

技术分享

显示字段顺序

  • 属性如下
fields=[]
  • 点击某行ID的链接,可以转到修改页面,默认效果如下图

技术分享

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    fields=[‘aParent‘,‘atitle‘]

刷新浏览器效果如下图

技术分享

  • 在下拉列表中输出的是对象的名称,可以在模型类中定义str方法用于对象转换字符串
  • 打开booktest/models.py文件,修改AreaInfo类,添加str方法
class AreaInfo(models.Model):
    ...
    def __str__(self):
        return self.atitle.encode(‘utf-8‘) # python2的写法,python3不要转码

刷新浏览器效果如下图

技术分享

分组显示

  • 属性如下
fieldsets=(
    (‘组1标题‘,{‘fields‘:(‘字段1‘,‘字段2‘)}),
    (‘组2标题‘,{‘fields‘:(‘字段3‘,‘字段4‘)}),
)

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    # fields=[‘aParent‘,‘atitle‘]
    fieldsets = (
        (‘基本‘, {‘fields‘: [‘atitle‘]}),
        (‘高级‘, {‘fields‘: [‘aParent‘]})
    )

刷新浏览器效果如下图

技术分享

说明:fields与fieldsets两者选一使用

关联对象

  • 在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种
  • 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
  • 子类TabularInline:以表格的形式嵌入
  • 子类StackedInline:以块的形式嵌入
  • 打开booktest/admin.py文件,创建AreaStackedInline类
class AreaStackedInline(admin.StackedInline):
    model = AreaInfo#关联子对象
    extra = 2#额外编辑2个子对象

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

刷新浏览器效果如下图

技术分享

  • 可以用表格的形式嵌入
  • 打开booktest/admin.py文件,创建AreaTabularInline类
class AreaTabularInline(admin.TabularInline):
    model = AreaInfo#关联子对象
    extra = 2#额外编辑2个子对象

打开booktest/admin.py文件,修改AreaAdmin类如下

class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaTabularInline]

  

刷新浏览器效果如下图

技术分享

重写模板

  • 在templates/目录下创建admin目录,结构如下图

技术分享

  • 打开当前虚拟环境中Django的目录,再向下找到admin的模板,目录如下

技术分享

/home/python/.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/templates/admin

将需要更改文件拷贝到第一步建好的目录里,此处以base_site.html为例

技术分享

编辑base_site.html文件

技术分享View Code

在浏览器中转到列表页面,刷新后如下图

技术分享

其它后台的模板可以按照相同的方式进行修改







以上是关于Admin站点的主要内容,如果未能解决你的问题,请参考以下文章

Django-Admin 站点的内置树视图?

Django admin 将 HTML 实体转换为它们的字符

Admin站点

django之admin站点

Django 中Admin站点的配置

在应用程序 django 中使用 % url 'admin' % 引用管理站点