一、Django可视化后台自定义菜单。
代码语言:javascript复制SIMPLEUI_CONFIG = {
'system_keep': False, # 关闭系统菜单
'menu_display': ['首页大屏','认证和授权','宏观质量', '品牌建设', '产品安全', '企业质量画像',
'企业基础设施'],
'dynamic': False, # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
'menus': [{
'name': 'Simpleui',
'icon': 'fas fa-code',
'url': 'https://gitee.com/tompeppa/simpleui',
'codename': 'simpleui'
}, {
'name': '在线社区',
'icon': 'fa fa-file',
'codename': 'test',
'models': [{
'name': 'SimplePro',
'icon': 'far fa-surprise',
'models': [{
'name': 'Pro文档',
'url': 'https://simpleui.72wo.com/docs/simplepro'
}, {
'name': '购买Pro',
'url': 'http://simpleui.72wo.com/simplepro'
}]
}, {
'name': '社区',
'url': 'https://simpleui.72wo.com',
'icon': 'fab fa-github'
}, {
'name': '图片转换器',
'url': 'https://convert.72wo.com',
'icon': 'fab fa-github',
'codename': 'nat'
}]
}]
}
注意:此代码块在setting.py中使用,如果需要搭配使用,需要models模型在admin.py中进行注册之后即可映射出url替代原文中的url。此自定义菜单支持多级菜单。django后台会直接以APP名称为一级菜单,数据表为二级菜单,最多到二级菜单,没法到三级菜单。我们安装simpleui可以解决这个。 另外需要注意的是,一级菜单必须在menu_display里命名,并且两者名字必须一致,不然可能会出现菜单列表丢失的现象。
二、Django中admin.py的花式操作
添加自定义导出表头按钮:
Admin
代码语言:javascript复制class TestAdmin(ImportExportModelAdmin):
list_display = ['year', 'std_type', 'std_num']
search_fields = ['std_num']
list_per_page = 20
# 导出表头方法
def export_table_header(self, request, queryset):
resource = TestResource()
headers = resource.get_export_headers()
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="table_header.csv"'
writer = csv.writer(response)
writer.writerow(headers)
return response
# 自定义表头按钮名称
export_table_header.short_description = '导出表头'
# 添加自定义动作
actions = ['export_table_header']
resource_class = TestResource
Resource
代码语言:javascript复制class TestResource(resources.ModelResource):
class Meta:
model = Test
fields = ('id', 'year', 'std_type', 'std_num', 'dt') # 自定义指定需要导出的字段
export_order = ('year', 'std_type', 'std_num', 'dt')
def export_headers_to_csv(self):
dataset = self.export(queryset)
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename="exported_data.xlsx"'
dataset.export(response)
return response
def get_export_headers(self):
headers = []
for field_name, field in self.fields.items():
chinese_name = self.field_mapping.get(field.attribute, field.column_name)
headers.append(chinese_name)
return headers