目录
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 = "xls" # 还可以为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__"
打开下载文件
注意事项
- 关于get_pandas_kwargs方法里{"index": False},如果是False, 那么在下载的时候不会带索引,如果为Ture,那么会多出一列索引列,如下图所示
-
不重写get_pandas_filename方法那么文件名就默认为response
-
要调用update_pandas_headers方法返回数据,不然get_pandas_filename不会生效
-
renderer_classes参数如果不指定,那么默认的效果就是不会加粗的字体,如下图