Django Admin使用ExportMixin仅导出list_display列及对应verbose_name的方法咨询
解决方案
你需要通过自定义ModelResource类来控制导出逻辑,具体实现步骤如下:
步骤1:自定义资源类限制导出字段、处理状态字段显示
首先在你的admin.py中新增资源类定义:
from import_export import resources, fields from .models import Ico class IcoResource(resources.ModelResource): # 处理带choices的状态字段,导出可读文本 ico_situation = fields.Field( attribute="get_ico_situation_display", # 不填column_name则默认读取模型字段的verbose_name作为表头 ) status = fields.Field( attribute="get_status_display", ) # 处理list_display中的自定义方法字段 get_reference_user_income = fields.Field( attribute="get_reference_user_income", ) class Meta: model = Ico # 直接复用你配置的list_display,严格限制仅导出这些列 fields = ( 'account', 'pair', 'amount', 'ico_situation', 'expire_date', 'price', 'token_amount', 'reference_user', 'get_reference_user_income' ) # 保持导出顺序和list_display一致 export_order = fields
步骤2:在Admin类中绑定自定义资源类
修改你现有的IcoAdmin配置,新增resource_class属性即可:
@admin.register(Ico) class IcoAdmin(ExportMixin, BaseAdmin): resource_class = IcoResource # 新增这行绑定自定义导出规则 list_display = ( 'account', 'pair', 'amount', 'ico_situation', 'expire_date', 'price', 'token_amount', 'reference_user', 'get_reference_user_income') list_filter = ('account', 'account__is_bot') search_fields = ('account_id', 'wallet_id', 'ico_situation') raw_id_fields = ('account', 'pair', 'wallet', 'reference_user')
补充说明
- 所有未在
fields参数中声明的字段(比如id、wallet、final_token_amount等)都会自动排除,不会出现在导出文件中 - 如果外键字段(如account、pair)导出时显示的是ID值,你可以在Field的attribute参数中指定关联字段,比如
attribute="account__username"即可导出关联账号的用户名 - 如果你模型字段已经配置了
verbose_name,不需要额外设置column_name,导出时会自动读取verbose_name作为表头
内容的提问来源于stack exchange,提问作者Furkan Demirel
相关产品推荐
相关产品推荐

