我正在我的 API 上设置一个端点,它应该返回一个 XLSX 文件。DRF 文档提到https://github.com/wharton/drf-renderer-xlsx作为主要的外部渲染包,除了似乎也能够渲染 XLSX 的 pandas。
在他们的代码示例中,他们使用了与 mixin 配对的 ReadOnlyViewset,但没有提及它如何与 APIViews 一起使用。尽管如此,我还是想使用https://harshahegde.dev/rendering-xlsx-files-in-django-rest-framework-ckagk293p00eumks1bf4dlhie所示的 APIView 但是.. 这在使用 CURL 或 Postman 时效果很好,但是当通过浏览器完成我收到此错误:
'Request' object has no attribute 'accepted_renderer'
据我了解,这是因为没有设置 Accept 标头(例如 'Accept':'application/xlsx'),我通过从 renderer_classes 中删除 Mixin 来解决此问题,因此它只返回一个名为“xlsx”的文件,但我可以' t 弄清楚如何在没有 mixin 的情况下设置文件名。如何使用试图从浏览器访问 URL 的 APIView 设置文件名?
我的观点:
class SomedataXlsx(APIView):
renderer_classes = [XLSXRenderer, JSONRenderer]
def get(self, request):
queryset = Somedata.objects.all()
serializer = SomeDataSerializer(queryset, many=True)
return Response(serializer.data)