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

server/2025/3/22 17:51:04/

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

比如要让【商品货品信息】中的9个数据表根据人为规定来进行排序
结果:工程量很大。
能够实现人为的自定义排序

在这里插入图片描述
最简单的设置就是给模型添加号数标记
在这里插入图片描述

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

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

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

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

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

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 PaymentAccountAdminfrom .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的路由


# --------------【添加配置 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中的应用urlpath('', include('wenzhang.urls')),#文章应用 使用api方式传递数据# path('', include('home.urls')),#主页 使用mtv方式返回页面path('yinyue/', include('yinyue.urls')),#主页 使用mtv方式返回页面# yuyin 应用# path('yuyin/', include('yuyin.urls')),]

http://www.ppmy.cn/server/177106.html

相关文章

Pytorch中的torch.utils.data.Dataset 类

1、使用方法 from torch.utils.data import Dataset 2、torch.utils.data.Dataset 类的定义 class Dataset(Generic[_T_co]):r"""An abstract class representing a :class:Dataset.All datasets that represent a map from keys to data samples should sub…

油候插件、idea、VsCode插件推荐(自用)

开发软件&#xff1a; 之前的文章&#xff1a; 开发必装最实用工具软件与网站 推荐一下我使用的开发工具 目前在用的 油候插件 AC-baidu-重定向优化百度搜狗谷歌必应搜索_favicon_双列 让查询变成多列&#xff0c;而且可以流式翻页 Github 增强 - 高速下载 github下载 TimerHo…

基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布

第〇部分 前言 一幅带有地理空间参考、且包含海陆分布的DEM图像在研究区的绘制中非常常见&#xff0c;本文将实现以下图像的绘制 关键步骤&#xff1a; &#xff08;1&#xff09;NOAA-NCEI官方下载最新的ETOPO-2022 DEM数据 &#xff08;2&#xff09;在ArcGIS&#xff08;…

JavaIO流的使用和修饰器模式(直击心灵版)

系列文章目录 JavaIO流的使用和修饰器模式 文章目录 系列文章目录前言一、字节流&#xff1a; 1.FileInputStream(读取文件)2.FileOutputStream(写入文件) 二、字符流&#xff1a; 1..基础字符流:2.处理流&#xff1a;3.对象处理流&#xff1a;4.转换流&#xff1a; 三、修饰器…

【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现全局状态管理

前言 在现代应用程序开发中&#xff0c;状态管理是构建复杂且可维护应用的关键。随着应用程序规模的增长&#xff0c;组件之间共享和同步状态变得越来越具有挑战性。如果处理不当&#xff0c;状态管理可能会导致代码混乱、难以调试&#xff0c;并最终影响应用程序的性能和可扩…

Lineageos 22.1(Android 15)实现负一屏

一、前言 方案是参考的这位大佬的&#xff0c;大家可以去付费订阅支持一波。我大概理一下Android15的修改。 大佬的方案代码 二、Android15适配调整 1.bp调整&#xff0c;加入aidl引入&#xff0c;这样make之后就可以索引代码了 filegroup {name: "launcher-src"…

arp -a命令输出详解

一、arp -a输出 C:\WINDOWS\system32>arp -a接口: 169.254.199.84 --- 0x2Internet 地址 物理地址 类型169.254.255.255 ff-ff-ff-ff-ff-ff 静态224.0.0.2 01-00-5e-00-00-02 静态224.0.0.22 01-00-5e-00-00-16…

如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析

文章目录 聚合函数group by子句的使用实战OJ日期函数字符串函数数学函数其它函数 聚合函数 函数说明COUNT([DISTINCT] expr)返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和&#xff0c;不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值&…