drf结合rest-pandas实现下载excel文件

drf结合rest-pandas实现下载excel文件

下载rest-pandas

pip install rest-pandas

使用方法

在views.py文件中

from rest_pandas.views import PandasViewBase
from rest_pandas.renderers import PandasExcelRenderer

class TestExcelRenderer(PandasExcelRenderer):
    format = "xlsx"  # 还可以为xlsx 该参数决定了下载的文件格式,默认不写为csv

    def get_pandas_kwargs(self, data, renderer_context):
        return {"index": False}  # 看下面注意事项


class TestExcelFile(PandasViewBase, ListAPIView):
    serializer_class = TestExcelFileSerializer
    queryset = Book.objects
    renderer_classes = [TestExcelRenderer, ]

    def get_pandas_filename(self, request, format):  # 该方法决定下载的文件名
        return "Test Excel File"

    def list(self, request, *args, **kwargs):
        response = super().list(request, *args, **kwargs)
        return self.update_pandas_headers(response)  # 必须把response传入该方法,不然名字无效

在serializers.py文件中

class TestExcelFileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

打开下载文件

image

注意事项

  • 关于get_pandas_kwargs方法里{"index": False},如果是False, 那么在下载的时候不会带索引,如果为Ture,那么会多出一列索引列,如下图所示

image

  • 不重写get_pandas_filename方法那么文件名就默认为response

  • 要调用update_pandas_headers方法返回数据,不然get_pandas_filename不会生效

  • renderer_classes参数如果不指定,那么默认的效果就是不会加粗的字体,如下图

image

posted @ 2022-11-17 17:35  zong涵  阅读(328)  评论(0编辑  收藏  举报