django-admin后台详解

  • 一、使用
    • 1.1 本地化
    • 1.2 创建超管理员
    • 1.3 注册模型类
    • 1.4 自定义模型管理页面
      • 1)自定义模型类举例
  • 二、模型管理类相关的属性
    • 2.1列表页选项
      • 2.1.1页大小:
      • 2.1.2 列表中的列
        • 1)属性:
        • 2)2.1.3 列的排序
        • 3)列的标题
      • 2.1.3 右侧的过滤栏
      • 2.1.4 搜索框
      • 2.1.5 操作选项的位置
    • 2.2 编辑页选项
      • 2.2.1 显示字段的顺序:
      • 2.1.2 分组显示:
      • 2.1.3 关联选项
    • 2.2 模板重写
  • 三、参考资料

一、使用

1.1 本地化

语言本地化和时间本地化:
在setting.py文件中将更改

# 语言
LANGUAGE_CODE = 'zh-hans'
# 时间
TIME_ZONE = 'Asia/Shanghai'

1.2 创建超管理员

在cmd中:python manage.py createsuperuser

1.3 注册模型类

from app.models import 模型类
admin.site.register(模型类)

1.4 自定义模型管理页面

1.自定义模型类
2.注册模型类的时候给register函数添加第二个参数,就是自定义模型管理类的名字

1)自定义模型类举例

创建一个地区管理类,页面上显示地区id和地区的名字
模型类:model.py

from django.db import models

# Create your models here.
class Areas(models.Model):
    """创建省市县的数据库关联模型"""
    #创建主键
    # id = models.CharField(max_length=20, primary_key=True)
    # 区域名称 verbose_name: 在后台管理时显示的标题名称
    name = models.CharField( max_length=20, null=True, blank=True)
    # 区域上级标识,外键
    pid = models.ForeignKey('Areas', on_delete=models.CASCADE,null=True, blank=True, db_constraint=False)
    # 地名简称
    sname = models.CharField(max_length=40, null=True, blank=True)
    # 地区等级
    leval = models.CharField(max_length=11, null=True, blank=True)
    # 区域编码
    citycode = models.CharField(max_length=20, null=True, blank=True)
    # 区域邮政编码
    yzcode = models.CharField(max_length=20, null=True, blank=True)
    # 区域组合名称
    mername = models.CharField(max_length=100, null=True, blank=True)
    # 经纬度
    Lng = models.CharField(max_length=10, null=True, blank=True)
    Lat = models.CharField(max_length=10, null=True, blank=True)
    # 地址拼音
    pinyin = models.CharField(max_length=100, null=True, blank=True)
    class Meta:
        db_table = 'areas'
    def __str__(self):
        """更改返回name"""
        return self.name

后台管理类:admin.py

from django.contrib import admin
from booktest.models import Areas
class AreasAdmin(admin.ModelAdmin):
    """创建地区的管理类模型"""
    # 要在标题栏显示的内容  前两个为类属性后一个为自己定义的方法
    list_display = ['id', 'name','aparent']
# 注册地区模型类
admin.site.register(Areas, AreasAdmin)

二、模型管理类相关的属性

2.1列表页选项

2.1.1页大小:

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

list_per_page=100

显示如图:
django-admin后台详解_第1张图片

我们将其修改成每页显示20条数据,修改admin文件下:

class AreasAdmin(admin.ModelAdmin):
    """创建地区的管理类模型"""
    # 设置页面上一次显示10个数据
    list_per_page = 20

修改后显示如图:
在这里插入图片描述
django-admin后台详解_第2张图片

2.1.2 列表中的列

1)属性:

list_display=[模型字段1,,模型字段2....]

修改admin:

class AreasAdmin(admin.ModelAdmin):
    """创建地区的管理类模型"""
    # 要在标题栏显示的内容  前两个为类属性后一个为自己定义的方法
    list_display = ['id', 'name','pid']
    # 设置页面上一次显示10个数据
    list_per_page = 20

如图:
django-admin后台详解_第3张图片

2)2.1.3 列的排序

点击列头可以进行升序或降序排列。
将方法作为列
列可以是模型类的字段,也可以是模型类的方法,要求方法要有返回值
在app的models.py文件中的Areas模型类中添加f方法:

    def aparent(self):
        """自己定义的标题显示方法父级地区"""
        if self.pid is None:
            return "----"
        return self.pid.name

admin.py文件中:

class AreasAdmin(admin.ModelAdmin):
    """创建地区的管理类模型"""
    # 要在标题栏显示的内容  前两个为类属性后一个为自己定义的方法
    list_display = ['id', 'name','aparent']
    # 设置页面上一次显示10个数据
    list_per_page = 20

显示如下:
django-admin后台详解_第4张图片
方法默认是不能排序的,如果需耀排序为方法指定排序依据:

    aparent.admin_order_field = 模型类字段

在models.py文件中的Areas类中添加:

    # 设置点击列标题的时候要按什么排序
    aparent.admin_order_field = 'name'

3)列的标题

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

aparent.short_description=列标题

在models.py文件中的Areas类中添加:

    # 设置列标题的名称
    aparent.short_description="父级地区"

如果是直接用的类属性的话加列标题要在模型定义的哪里添加verbose_name=’标题’
在models.py文件中的Areas类中更改:

name = models.CharField( verbose_name='名称',max_length=20, null=True, blank=True)

显示如图:
django-admin后台详解_第5张图片

2.1.3 右侧的过滤栏

属性:只能接受字段,会将对应的值列出来,用于快速过滤,一般用于有重复的字段。

list_filter=[]

修改admin中的自定义管理类AreasAdmin:

list_filter = ['name']

显示如图:
django-admin后台详解_第6张图片

2.1.4 搜索框

用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。

search_fields = []

修改admin中的自定义管理类AreasAdmin:

# 添加一个以地区名的搜索框
    search_fields = ['name']

显示如图:
django-admin后台详解_第7张图片

2.1.5 操作选项的位置

顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True.

actions_on_top = True

底部显示属性,设置为True在底部显示,设置为Flase不在底部显示,默认为False

在admin中的自定义管理类AreasAdmin添加:

    # 增加一个底部的删除选项
    actions_on_bottom = True
    # 将上面的删除操作选项关了
    actions_on_top = False

效果如图:
django-admin后台详解_第8张图片

2.2 编辑页选项

2.2.1 显示字段的顺序:

属性:fields=[]
默认如图:

django-admin后台详解_第9张图片
在admin中的自定义管理类AreasAdmin添加:

  # 自定义编辑页的显示顺序,以及要显示的内容
    fields = ['name','pid','leval','yzcode','citycode','mername','Lng','Lat','pinyin']

效果如图:
django-admin后台详解_第10张图片

2.1.2 分组显示:

属性:

    fieldsets = (
        ("组1标题",{"fields":["字段1",'字段2']}),
        ("组2标题",{"fields":["字段1",'字段2']})
    )

在admin中的自定义管理类AreasAdmin添加:

    fieldsets = (
        ("地区",{"fields":["name",'pid']}),
        ("区域",{"fields":['leval','yzcode','citycode','mername']}),
        ("经纬度",{'fields':['Lng','Lat']}),
        ("拼音",{'fields':['pinyin']})
    )

效果:
django-admin后台详解_第11张图片

注:fields和fieldsets只能使用一个要不然会报一下错误ERRORS: : (admin.E005) Both 'fieldsets' and 'fields' are specified.

2.1.3 关联选项

在一对多的挂戏中,可以在一端编辑页面中编辑多端的队形,嵌入多端对象的方式包括表格、块两种。类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类:StackedInline:以块的形式嵌入。
1.块的显示

  1. 在应用下的admin.py文件中创建StackedInline类:
class AreasStackedInline(admin.StackedInline):
    """在编辑页中显示子类(块的形式显示)"""
    # 关联子类对象
    model = Areas
    # 显示额外的编辑对象
    extra = 1

2)在admin中的自定义管理类AreasAdmin添加:

    # 编辑页显示子类(块的形式显示)
    inlines = [AreasStackedInline]

3)效果如图:
django-admin后台详解_第12张图片
2.表格显示:

  1. 在应用下的admin.py文件中创建TabularInline类:
class AreasTabularInline(admin.TabularInline):
    """在编辑页中显示子类信息(表格的形式显示)"""
    # 关联子类对象
    model = Areas
    # 显示额外的编辑对象
    extra = 1

2)在admin中的自定义管理类AreasAdmin添加:

    # 编辑页显示子类(表格的形式显示)
    inlines = [AreasTabularInline]

3)效果如图:
django-admin后台详解_第13张图片

2.2 模板重写

找到django中admin应用然后将里面的模板文件复制一份放到自己的项目模板文件目录下,然后更改自己要更改的页面上的模板文件.
即:

  1. 创建一个admin的模板目录,将余姚更改的模板复制到此目录下:
    django-admin后台详解_第14张图片
  2. 更改文件的内容:
{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}a>h1>
    <hr>
    <h1>自定义的管理页模板h1>
    <hr>
{% endblock %}
{% block nav-global %}{% endblock %}

添加了一个自定义管理页面的文字。

  1. 效果如图:
    django-admin后台详解_第15张图片

三、参考资料

django admin 后台文档

你可能感兴趣的:(#,django笔记,python)