欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度定制django admin界面

程序员文章站 2022-06-01 13:41:10
...

定制django admin界面

1.修改admin界面中的名字

1.1 修改模型名字

models.py的模型类中中添加一个Meta内部类,设置 verbose_nameverbose_name_plural属性。

class Courier(models.Model):
    def __str__(self):
        return self.courier_id

    class Meta:
        verbose_name = '配送人员'
        verbose_name_plural = '配送人员'  # 设置复数的显示

1.2 修改admin站点标题和名字

在任何一个应用的admin.py中添加

admin.site.site_header = '管理'
admin.site.site_title = '校园管理'
admin.site.index_title = '校园管理'

即可定义管理站点左上角的名字

2.更换app在admin中名字

修改apps.py

from django.apps import AppConfig

VERBOSE_APP_NAME = '学习资源'


class LearningSourceConfig(AppConfig):
    name = 'learningsource'
    verbose_name = VERBOSE_APP_NAME

3.中文设置

settings.py中设置

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

4.定制列表页

4.1 注册模型管理器

在应用的admin.py中添加相应模型的管理类,例如有一个模型是Mymodel,增加一个管理器

class MymodelAdmin(admin.ModelAdmin):
    ......

admin.py中注册并将模型和模型管理器绑定。

#在admin中注册绑定模型和模型管理器
admin.site.register(Mymodel, MymodelAdmin)

或者使用装饰器

@admin.register(Mymodel)
class MymodelAdmin(admin.ModelAdmin):
    ......

4.2 定制模型列表

class MymodelAdmin(admin.ModelAdmin):
    #列表中显示的字段(表头)
    list_display = ('Field1', 'Field2', 'Field3')
    #设置排序字段,负号表示降序排序
    ordering = ('-created_time',)
    #设置点击哪些字段可以点击进入编辑界面,默认为id字段
    list_display_links = ('id', 'title')
    #定制操作选项
    #操作选项位置
    #列表顶部,设置为False不在顶部显示,默认为True。
	actions_on_top=True

	#列表底部,设置为False不在底部显示,默认为False。
	actions_on_bottom=False
    #搜索框,是一个列表,列表中是作为搜索依据的字段
    search_fields=['Field1', 'Field2']
    # 设置详细页面中的只读字段,此时不能在详细页面进行更改。
    readonly_fields = ('goods_order_id', 'buyer_id', 'goods_id', 'pub_date')
    # 在详细页面中以单选按钮显示
    radio_fields = {"goods_order_status": admin.HORIZONTAL}#或者admin.VERTICAL
     # 设置详情页面的字段顺序以及显示的字段
    fields = ('goods_order_id', 'price', 'count')
    #设置在详情页同一行显示的字段
    #'goods_order_id', 'price'将在同一行显示
     fields = (('goods_order_id', 'price'), 'count')
    # 分页显示
    list_per_page = 20
    # 分页控件,使用django默认控件
    paginator = Paginator

4.3 定制字段颜色

models.py中添加

class Mymodel(models.Model):
        def colored_status(self):
        color_code = ""
        if self.status == 'completed':
            color_code = 'green'
            colored_status = "已完成"
        if self.status == 'canceled':
            color_code = 'red'
            colored_status = "已取消"
        if self.status == 'processing':
            color_code = "orange"
            colored_status = "处理中"
        return format_html(
            '<span style="color: {};">{}</span>',
            color_code,
            colored_status,
        )

    # 让有颜色的字段在排序时遵循原来的字段
    colored_status.admin_order_field = 'status'
    # 给有颜色的字段取一个别名
    colored_status.short_description = '订单状态'

在相应的admin.py的管理器的list_display中添加:

 list_display = (....,'colored_status',...)

4.4 数据表格过长内容省略显示

有时数据表中的文本过长,造成界面很不美观,需要省略显示,方法:在models.py中添加

    def shortcut_intro(self):
        if len(str(self.intro)) > 10:
            return self.intro[:10] + "..."
        else:
            return self.intro
    # 设置截断的intro在排序时遵循原来的字段
    shortcut_intro.admin_order_field = 'intro'
    # 给截断的intro设置别名
    shortcut_intro.short_description = "简介"

这样在简介文本大于10的时候就会省略显示

深度定制django admin界面

注意:使用这种方式原来字段设置的别名将无效。

4.5 禁用某个操作

admin.py中添加

class Mymodel(models.Model):
     # 禁用添加操作
    def has_add_permission(self, request):
        return False
     # 禁用更改操作
    def has_change_permission(self, request):
        return False
     # 禁用删除操作
    def has_delete_permission(self, request):
        return False

4.6 填充当前用户

models.py中字段

class Mymodel(models.Model):
     creator_name = models.CharField("创建者", max_length=50)

admin.py中添加

 # 保存创建者名称
    def save_model(self, request, obj, form, change):
        if not change:
            obj.creator_name = request.user.get_username()
        obj.save()#必须加,否则不会保存

3.使用bootstrap-admin美化界面

首先安装第三方安装包:

pip install bootstrap-admin

在项目的settings.pyINSTALLED_APPS中添加:

 'bootstrap_admin',

保存后刷新admin界面即可。接下来修改logo和站点名称。首先修改主界面logo图标,在python安装目录下按照下述目录进行寻找:Lib\site-packages\bootstrap_admin\static\bootstrap_admin\img,该img文件夹中的logo-140x60.png即为后台管理系统主界面logo,将其替换即可。效果如下:

深度定制django admin界面

4.使用django-simpleui美化界面

版本

simpleui3.1

安装

安装django-simpleui:

pip install django-simpleui

在项目的settings.pyINSTALLED_APPS中添加:

INSTALLED_APPS = [
 'simpleui',
 'django.contrib.admin',
 ....
]

隐藏simpleui主页信息

隐藏前

深度定制django admin界面

setting.py中添加

SIMPLEUI_HOME_INFO = False

即可。

隐藏后:

深度定制django admin界面

修改默认图标

settings.py中添加如下配置:

字段 说明
name 模块名字,请注意不是models.pymodel的命名,而是菜单栏上显示的文本,因为model是可以重复的,会导致无法区分
icon 图标,可以参考fontawesome的图标,只需要将完整的class名填入即可。

示例:

SIMPLEUI_ICON = {
	'商品订单': 'fab fa-apple',
}

修改logo

settings.py中添加

SIMPLEUI_LOGO = '图片URL'

如果需要使用本地图片,需要在Lib/site-packages/simpleui/static/admin/simpleui-x/img中把原来的logo.png替换掉(图片名称不要改变)。

设置默认主题

settings.py中添加:

SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'

可选值见官网

https://gitee.com/tompeppa/simpleui/blob/master/QUICK.md#%E9%BB%98%E8%AE%A4%E4%B8%BB%E9%A2%98