django - 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}
解决方案
推荐阅读
- php - 隐藏表格中的多个子行
- jenkins - Need to deploy to staging
- javascript - 如何将值从 angular .ts 文件传输到 javascript .js 文件
- .net - Writing a regex for a pattern like CA123456SDL or CA123456
- alexa - 从 alexa 技能中调用 alexa 技能
- excel - Excel macro to convert a one - one relation to a one - many
- docusignapi - DocuSign API - GET Status of Single Envelope Returns Results for Multiple Envelopes
- mysql - 我应该将间隔数据从单个数据分离到 MySQL 中的两个表吗?
- r - 从数据框中的前一行中减去值的问题
- reactjs - 如何从 React.js 中的另一个类组件调用方法