【Django】admin后台自定义导出全部数据并且返回自定义中文名

    def export_as_excel_all(self, request, queryset):

        # queryset 是前端勾选的

        meta = self.model._meta
        field_names_raw = [field.name for field in meta.fields]  # 原数据表字段
        field_names = []

        # 自定义文字名
        for data in field_names_raw:
            field_names.append(models.Username._meta.get_field(data).verbose_name)

        response = HttpResponse(content_type='application/msexcel')  # 定义响应内容类型
        response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'  # 定义响应数据格式
        wb = Workbook()  # 新建Workbook
        ws = wb.active  # 使用当前活动的Sheet表
        ws.append(field_names)  # 将模型字段名作为标题写入第一行

        # 遍历的对象
        queryset = models.Username.objects.all()
        for obj in queryset:
            for field in field_names_raw:
                data = [f'{getattr(obj, field)}' for field in field_names_raw]  # 将模型属性值的文本格式组成列表

            ws.append(data)  # 写入模型属性值
        wb.save(response)  # 将数据存入响应内容
        return response

    export_as_excel_all.short_description = '导出全部'  # 该动作在admin中的显示文字

 

posted @ 2022-03-23 15:42  PythonNew_Mr.Wang  Views(267)  Comments(0)    收藏  举报