【Django Admin Pro】django-import-export, 导出数据与权限控制

复制代码
# settings.py


INSTALLED_APPS = [
    'import_export',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
复制代码

 

 

 

复制代码
# admin.py

from import_export.admin import ExportActionModelAdmin

@admin.register(UserInfo)
class UserInfoAdmin(ExportActionModelAdmin):

    list_display = ("DEMO")

    list_per_page = 10

    # 配置导出数据
    resource_class = UserinfoResource
  

  
# 那么,如果我们想设置成不是超级用户的时候就隐藏它应该怎么做呢?在封装的函数中,它的名称叫做export_admin_action
  # 判断后 自定义返回自定义按钮
  def get_actions(self, request):
  actions = super(InnerOrderAdmin, self).get_actions(request)
  if not request.user.is_superuser or request.user.groups.filter(name="运营"):
  if 'back_inner_order' in actions:
  del actions['back_inner_order']
if 'export_admin_action' in actions:
  del actions['export_admin_action']
return actions
  
  
复制代码

 

 

 

复制代码
#export_config.py

"""" 导出配置  """
from .cont import type_interest_choices
from .models import UserInfo
from import_export import resources, widgets
from import_export.fields import Field


# 账号状态 自定义返回结果 class is_staff_widget(widgets.BooleanWidget): def render(self, value, obj): """ 如果模型字段做了`null=True`的设置,这里就可以处理“真、假、未知”三种状态 """ if value == 0: return "激活" else: return '冻结' # 性别状态 自定义返回结果 class sex_widget(widgets.IntegerWidget): """ 如果模型字段做了`null=True`的设置,这里就可以处理“真、假、未知”三种状态 """ def render(self,value, obj): if value == 0: return "男生" else: return '女生' # 兴趣爱好状态 复选框配合PRO class interest_widget(widgets.CharWidget): """ 复选框的值: type_interest_choices = ( (0, '音乐'), (1, '运动'), (2, '舞蹈'), (3, '游戏'),) """ def render(self,value, obj): string = "" for index in value.split(","): if index: string = string + type_interest_choices[int(index)][1] + "," return string[0:-1] class UserinfoResource(resources.ModelResource): """ attribute: 表名字 column_name: 导出字段名字 widget: 自定义字段值返回值 判断自定义返回值 """ name = Field(attribute='name', column_name='姓名') head = Field(attribute='head', column_name='照片') sex = Field(attribute='sex', column_name='性别',widget=sex_widget()) interest = Field(attribute='interest', column_name='兴趣爱好',widget=interest_widget()) is_staff = Field(attribute='is_staff', column_name='账号状态',widget=is_staff_widget()) age = Field(attribute='age', column_name='年龄') score = Field(attribute='score', column_name='成绩') time = Field(attribute='time', column_name='时间') date = Field(attribute='date', column_name='日期') class Meta: model = UserInfo
复制代码

 

 

图:

 

 

 

 

 

PS:这里会出现一种导不出数据BUG,要注意的是设计中最好不要出现相同表字段的,否则会出现这种情况 

 

 

 

posted @   PythonNew_Mr.Wang  Views(1100)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示