首页 > 解决方案 > Excel 文件作为 Django Rest 框架中的序列化程序响应

问题描述

我正在使用 ModelViewSet 类上传一个 csv 文件,对其进行一些处理并将输出保存为本地目录中的 excel 文件。现在我想将此 excel 文件作为对同一请求的响应发回。但是我无法正确发送回 excel 文件作为响应。

序列化程序.py

class InputSerializer(serializers.ModelSerializer):
    class Meta:
        model = CsvUpload
        fields = ('datafile','created', 'owner', 'filename')
        read_only_fields = ('datafile','created', 'owner', 'filename')

class OutputSerializer(serializers.Serializer):
    excelfile = serializers.FileField()

视图.py

...
from .analyzers import MainAnalyser
from xlrd import open_workbook

class FileView(ModelViewSet):
    serializer_class = OutputSerializer
    parser_classes = (MultiPartParser, FormParser,)
    queryset = CsvUpload.objects.all()

    def create(self, request, *args, **kwargs):
        file_serializer = InputSerializer(data=self.request.data)
        file_serializer.is_valid(raise_exception=True)
        file_serializer.save()

        # Call Analyzer functions
        analyzer = MainAnalyzer(self.request.get('datafile'))
        analyzed_xls = analyzer.analyze_files() # returns path to the saved excel file

        # Send back response
        rb = open_workbook(analyzed_xls)
        fileobj = DjangoFile(rb, name='report.xlsx')

        output_serializer = OutputSerializer({'excelfile':fileobj})
        return Response(output_serializer.data)

我在网上找到的大多数方法都使用 HTTPResponse,但没有使用 ModelViewSet Response。上面代码的响应是 get 是

{"excelfile":null}

标签: djangodjango-rest-frameworkdjango-rest-viewsets

解决方案


推荐阅读