Django-import-export 对Django admin后台设置文件导出

django-import-export 这个第三方包可以导入也可以导出 ,导入以前用原生的写过了,我们本次展示导出。

python 3.8.0
django 2.2.0
pip install django-import-export
#settings.py
INSTALLED_APPS=[
"import_export",
]

引用你已经建好的models.py,对导出内容进行设置,如果内容较多,可以新建一个resources.py 文件,也可以直接写进admin.py 文件中,我就是直接写进admin.py

#admin.py
from import-export import resources
from import-export.admin import ImportExportModelAdmin
from import-export import fields
from import-export.farmats import base_farmats
...
class BillResources(resources.ModelResource):
  class Meta:
        model = Bill
        fields = (
        "status",
            "billitem__name",
            "room__unit",
            "total",
            ...
            )   #要导出的字段
            export_order = (
            "status",
            "billitem__name",
            "room__unit",
            "total",
            ...
            )   #导出的字段的排序     
    #接下来是admin中注册的修改
    class  BillAdmin(ImportExportModelAdmin): 
    list_display = (
        "code",
        "status",
        "billitem",
        "room",
        "total", 
        ...
        ) 
        list_filter = (
        "status",
        "billitem",
    )
  resource_class = BillResources   #这是加上的与导出配置关联设置,前面是注册admin的常规设置,根据个人需要      

上面简单设置完运行程序就可以看到:
在这里插入图片描述 右上角可以看到多出一个导入和导出,但是这还存在很多需要调整的问题。生成的表头是英文,不是当前对应的中文。在这里插入图片描述
这个需要写一个方法对应到models里面设置的vernbose_name

class BillResources(resources.ModelResource):
    def __init__(self):
        super(BillResources, self).__init__()

        field_list = Bill._meta.fields
        self.vname_dict = {}
        for i in field_list:
            self.vname_dict[i.name] = i.verbose_name

    def get_export_fields(self):
        fields = self.get_fields()
        for i, field in enumerate(fields):
            field_name = self.get_field_name(field)
            if field_name.find("__") > 0:
                _field_name = field_name.split("__")[0]
                if _field_name in self.vname_dict.keys():
                    field.column_name = self.vname_dict[_field_name]
            elif field_name in self.vname_dict.keys():
                field.column_name = self.vname_dict[field_name]
        return fields

    status = fields.Field(
        attribute="get_status_display", column_name=(u"status")
    )
    #上面的方法重写把表头显示成中文,还有外键如果写成"room__unit",这种样子的话,表头又还会显示英文,所以上面也做了分割。
    status 按照上面设置后会正常显示,不然会显示存入数据库的数字。
    

关于导出格式。默认是有这么多的,如果只想弄某种格式。限制的格式的话如下可以设置
在这里插入图片描述

class BillAdmin(ImportExportModelAdmin):
    def get_export_formats(self):    #该方法是限制格式
        formats = (
            base_formats.XLS,
        )
        return [f for f in formats if f().can_export()]

    def has_import_permission(self, request):  #这是隐藏导入按钮,如果隐藏其他按钮也可以这样操作,
        return False

最后最后注意外键要正常显示,不能只写字段名,还要链接到外键表格的对应字段,例如: “room__unit”
这些都设置完 基本 就是我们想要的结果了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值