一 使用环境
开发系统: windows
IDE: pycharm
数据库: msyql,navicat
编程语言: python3.7 (Windows x86-64 executable installer)
虚拟环境: virtualenvwrapper
开发框架: Django 2.2
Django 2.2通病===>访问admin出现问题:
报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
解决方法:https://www.cnblogs.com/djtang/p/10194811.html
二 Django Admin 左侧app站点名和app站点名下model排序方法
1.在 admin.py 最上方加入如下代码
from django.contrib import admin from django.apps import apps from django.utils.text import capfirst from django.utils.datastructures import OrderedDict # app站点名和 app站点名下model排序方法,作用于全局admin(model按注册顺序排列显示,app站点名按 main_menu_index = 0 后数字的大小排序 def find_app_index(app_label): app = apps.get_app_config(app_label) main_menu_index = getattr(app, 'main_menu_index', 9999) return main_menu_index def find_model_index(name): count = 0 for model, model_admin in admin.site._registry.items(): if capfirst(model._meta.verbose_name_plural) == name: return count else: count += 1 return count def index_decorator(func): def inner(*args, **kwargs): templateresponse = func(*args, **kwargs) app_list = templateresponse.context_data['app_list'] app_list.sort(key=lambda r: find_app_index(r['app_label'])) for app in app_list: app['models'].sort(key=lambda x: find_model_index(x['name'])) return templateresponse return inner registry = OrderedDict() registry.update(admin.site._registry) admin.site._registry = registry admin.site.index = index_decorator(admin.site.index) admin.site.app_index = index_decorator(admin.site.app_index)
2.在要排序的 apps.py 中, 加入 main_menu_index = 3 , 数字越大排的越靠后.
from django.apps import AppConfig class Px01Config(AppConfig): name = 'px01' verbose_name = '排序001' main_menu_index = 3 # 数字越大排的越靠下面