django设置admin的排列顺序,耗3小时【躲坑指南】

django 项目中,这个数据栏目的显示排列顺序我希望更贴近业务

比如要让【商品货品信息】中的9个数据表根据人为规定来进行排序

结果:工程量很大。

能够实现人为的自定义排序

最简单的设置就是给模型添加号数标记

主应用中创建admin--设置了其中一个应用的模型

如果要修改admin的排列顺序,如果仅仅写了一个模型的顺序,那么它仅仅会显示这个模型,而其他模型不显示,所以需要重写所有的排列顺序

这个主应用中需要把所有模型都进行配置后,才能够有一个自定义的排列顺序

配置了这个模型的单独排列顺序

/home/luichun/lc/Pyfile/Pywebback/app/shangpin/admin.py

python 复制代码
from django.contrib import admin

# Register your models here.
# --------------【添加配置 admin 中各个模型表排列顺序1】
from django.contrib.admin import AdminSite
from django.utils.text import capfirst
from django.apps import apps
# --------------【添加配置 admin 中各个模型表排列顺序2】


# /home/luichun/lc/Pyfile/Pywebback/app/shangpin/admin.py
# from django.contrib import admin
from .admins.goods import ProductAdmin, CategoryAdmin, BrandAdmin
from .admins.good_sales_quantity import SalesQuantityAdmin
from .admins.goods_carousel_image import ProductCarouselImageAdmin
from .admins.goods_detail_image import ProductDetailImageAdmin
from .admins.goods_guige import SpecificationFreightAdmin
from .admins.goods_video import AudioFileAdmin

# 收款账户
from .admins.receiving_account import PaymentAccountAdmin

from .model import (
    Product, Category, Brand, SalesQuantity, ProductCarouselImage,
    ProductDetailImage, SpecificationFreight, AudioFile,PaymentAccount,
)


# # --------------【添加配置 admin 中各个模型表排列顺序2】

# class ShangpinAdminSite(AdminSite):
#     def get_app_list(self, request):
#         # 获取所有应用的信息
#         app_dict = self._build_app_dict(request)
#         # 只保留"shangpin"应用
#         app_list = [app for app in app_dict.values() if app['app_label'] == 'shangpin']
#         if app_list:
#             app = app_list[0]
#             # 定义模型的自定义顺序
#             model_order = {
#                 '商品': 1,
#                 '分类': 2,
#                 '品牌': 3,
#                 '商品视频列表': 4,
#                 '商品详情图片': 5,
#                 '商品轮播图片': 6,
#                 '商品销售数量': 7,
#                 '商品长宽高与运费': 8,
#                 '收款账户': 9,
#             }
#             # 根据model_order对模型进行排序,未指定的模型排在最后
#             app['models'].sort(key=lambda x: model_order.get(x['name'], 999))
#         return app_list

# # 创建自定义AdminSite实例
# shangpin_admin_site = ShangpinAdminSite(name='shangpin_admin')
# # shangpin_admin_site = admin.AdminSite(name='shangpin_admin')
# # --------------【添加配置 admin 中各个模型表排列顺序2】


# --------------【添加配置 admin 中各个模型表排列顺序2】
# 自定义 AdminSite 类
class CustomAdminSite(admin.AdminSite):
    def get_app_list(self, request):
        app_dict = self._build_app_dict(request)
        app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())

        # 自定义 'shangpin' 应用的模型顺序
        for app in app_list:
            if app['app_label'] == 'shangpin':
                model_order = {
                    '商品': 1,
                    '分类': 2,
                    '品牌': 3,
                    '商品视频列表': 4,
                    '商品详情图片': 5,
                    '商品轮播图片': 6,
                    '商品销售数量': 7,
                    '商品长宽高与运费': 8,
                    '收款账户': 9,
                }
                app['models'].sort(key=lambda x: model_order.get(x['name'], 999))
        return app_list

# 替换默认的 admin.site
admin.site = CustomAdminSite()

# --------------【添加配置 admin 中各个模型表排列顺序2】


# ---这个将会注册到admin
# 注册模型及其对应的 Admin 类
# http://127.0.0.1:10005/admin/ 页面中显示出的栏目
admin.site.register(Product, ProductAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Brand, BrandAdmin)
admin.site.register(SalesQuantity, SalesQuantityAdmin)
admin.site.register(ProductCarouselImage, ProductCarouselImageAdmin)
admin.site.register(ProductDetailImage, ProductDetailImageAdmin)
admin.site.register(SpecificationFreight, SpecificationFreightAdmin)
admin.site.register(AudioFile, AudioFileAdmin)
admin.site.register(PaymentAccount, PaymentAccountAdmin)

# --- 使用自定义的admin中展示的排列顺序
# --------------【添加配置 admin 中各个模型表排列顺序3】
# 注册模型及其对应的 Admin 类到自定义的AdminSite
# http://127.0.0.1:10005/admin/shangpin/ 页面中显示出的栏目
# shangpin_admin_site.register(Product, ProductAdmin)
# shangpin_admin_site.register(Category, CategoryAdmin)
# shangpin_admin_site.register(Brand, BrandAdmin)
# shangpin_admin_site.register(SalesQuantity, SalesQuantityAdmin)
# shangpin_admin_site.register(ProductCarouselImage, ProductCarouselImageAdmin)
# shangpin_admin_site.register(ProductDetailImage, ProductDetailImageAdmin)
# shangpin_admin_site.register(SpecificationFreight, SpecificationFreightAdmin)
# shangpin_admin_site.register(AudioFile, AudioFileAdmin)
# shangpin_admin_site.register(PaymentAccount, PaymentAccountAdmin)
# --------------【添加配置 admin 中各个模型表排列顺序3】

配置了url的路由

python 复制代码
# --------------【添加配置 admin 中各个模型表排列顺序4】
from shangpin.admin import shangpin_admin_site
# --------------【添加配置 admin 中各个模型表排列顺序4】

urlpatterns = [
    # --------------【添加配置 admin 中各个模型表排列顺序5】
    # 必须排在 admin/ 之前,因为回根据这里的排序进行逻辑判断分配处理

    # path('admin/shangpin/', shangpin_admin_site.urls),  # "shangpin"应用的自定义AdminSite
    # --------------【添加配置 admin 中各个模型表排列顺序5】

    path('admin/', admin.site.urls),# 当用户访问/admin/路径时,显示Django的管理后台界面。
    
    # 将所有以api/开头的URL请求转发给router处理
    path('api2/', include(router.urls)),

    path('ckeditor/', include('ckeditor_uploader.urls')),# 当用户访问/ckeditor/路径时,会使用ckeditor_uploader应用中的URL配置。
    
    # 这个是在django-admin后台中进行编辑时需要的路径
    re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
    # static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    # 使用static函数来配置静态文件的URL路径。在开发环境中,这个配置会将MEDIA_URL路径映射到MEDIA_ROOT目录,用于处理媒体文件的访问。

# wenzhang app中的应用url
    path('', include('wenzhang.urls')),#文章应用 使用api方式传递数据
    # path('', include('home.urls')),#主页 使用mtv方式返回页面
    path('yinyue/', include('yinyue.urls')),#主页 使用mtv方式返回页面

# yuyin 应用
    # path('yuyin/', include('yuyin.urls')),

]
相关推荐
剩下了什么6 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥6 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉6 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变6 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
ggabb7 小时前
中文的全息之美:字音藏道,字里见宇宙
sqlite
WangYaolove13148 小时前
基于python的在线水果销售系统(源码+文档)
python·mysql·django·毕业设计·源码
山岚的运维笔记8 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里9 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科9 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦10 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法