You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:36:03