SimpleUI 定制 + DjangoAdmin
一. SimpleUI 使用
做完注册后台样式就会发生变化了
1. 下载
pip install django-simpleui
2. 注册(setting.py)
INSTALLED_APPS = [
# 必须放在最前面
'simpleui',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
]
3. 映射(admin.py)
# eg: admin.site.register(Book)
admin.site.register(表名)
二. 映射表中的字段
1. 简单映射
admin.py 中。
from .models import Book, Author, AuthorDetail
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(AuthorDetail)
2. 定制映射
class book_Manager(admin.ModelAdmin):
# 映射字段
list_display = ['id', 'name', 'publish', 'author']
# 注册使用
admin.site.register(Book, book_Manager)
3. 定制映射还回格式
写一个函数,将函数名在 list_display 中映射。
# 导入 format_html
from django.utils.html import format_html
class book_Manager(admin.ModelAdmin):
# 映射字段 (可以是中文)
list_display = ['id', 'name', 'publish', 'author', 'goodsImg']
# 写一个函数,将函数名在 list_display 中映射。
def goodsImg(self, obj):
return format_html(
# 可以还回 html 格式
f"<a href='http://127.0.0.1:8000/goods/media/{obj.productImg}' target='_blank'><img style='width:50px;' src='http://127.0.0.1:8000/user/media/{obj.productImg}' /></a>")
# 定义列名
goodsImg.short_description = "商品图片"
# 注册使用
admin.site.register(Book, book_Manager)
三. 样式定制
1. 修改后台名称 和 logo
(1). 代码
修改 logo 必须是链接图片(浏览器可直接访问的图片)
如果是本地图片的话,需替换 /Lib/site-packages/simpleui/static/admin/simpleui-x/img 下的图片
# 修改 logo (setting.py 中)
SIMPLEUI_LOGO = 'http://127.0.0.1:7999/media/photo14.jpg'
# 修改名称 (任意app下的 admin.py 中)
admin.site.site_header = '企业级后台管理系统后台' # 设置header
admin.site.site_title = '微雨停了管理后台2' # 设置title
admin.site.index_title = '微雨停了管理后台3'
(2). 效果展示
2. 侧边栏(app名称 + 表名称)
(1). 代码
app 名称,绿色 2024-04-22 08:56:58 星期一框部分。(app.py 中)
from django.apps import AppConfig
class BookConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'book'
# 修改 app名称(主要代码)
verbose_name = "图书-app"
表名称,,红色 框部分。 ( models.py 中)
""" 其他表名同理 """
# models.py 中
class Book(models.Model):
。。。
class Meta:
# 修改数据库表名,(不修改会是==> app名_表名)
db_table = "drf_book"
# 修改 表名称(主要代码)
verbose_name = "书"
verbose_name_plural = verbose_name
(2). 效果展示
3.修改下拉框外键字段展示
(1). 代码
# 方式一 admin.py 中
class OpenC(forms.ModelChoiceField):
def label_from_instance(self, obj):
# 自定义外键字段名
# return str(obj.id) + '-' + obj.name
return str(obj.id) + '自定义名'
class book_Manager(admin.ModelAdmin):
list_display = ['id', 'name', 'publish', 'author']
# 重写 formfield_for_foreignkey 方法
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'author':
res = OpenC(queryset=Author.objects.all())
return res
return super().formfield_for_foreignkey(db_field, request, **kwargs)
# 注册
admin.site.register(Book, book_Manager)
# 方式二 models.py 中
class User(models.Model):
username = models.CharField(max_length=100, verbose_name='用户名')
# 使用 __str__
def __str__(self):
return self.username
(2). 效果展示
图一:
图二:
四. 配置参数
参考链接:https://daoxuan.cc/posts/53297/
# 注册小区表
class TbCommunityAdmin(admin.ModelAdmin):
# 新增和修改页面需要展示的字段
fields = ('code','name', 'area', 'address', 'total_buildings','total_households','greening_rate','thumbnail','developer','estate_company','status','create_time','update_time')
# listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键)
list_display = ['code', 'name', 'address','area', 'total_buildings', 'total_households', 'greening_rate', 'image_data','state_data','create_time']
# 搜索
search_fields = ['name']
# 只读字段
readonly_fields = ('code', 'create_time', 'update_time')
# list_per_page设置每页显示多少条记录,默认是100条
list_per_page = 5
# ordering设置默认排序字段,负号表示降序排序
ordering = ('-create_time',)
# 设置哪些字段可以点击进入编辑界面
list_display_links = ('code', 'name')
# 详细时间分层筛选
date_hierarchy = 'create_time'
# list_editable 设置默认可编辑字段,这个字段必须要在list_display里面配置才可以使用
# 并且必须表里面有对应字段,不能是自己定义的列表字段
# list_editable = ['']
# fk_fields 设置显示外键字段,如果这个表里面有外键,并且想要在列表展示,就可以使用这个配置
# fk_fields = ('',)