Django REST Framework изменяет класс переопределения на основе ответа
Я использую Django 2.2 и Django REST Framework.
у меня есть APIView
который загрузит Zip-файл при успешном ответе.
class MultiDownloadCode(APIView):
serializer_class = MultiDownloadSerializer
permission_classes = (
IsAuthenticated,
CodeCanExport,
)
renderer_classes = (ZipRenderer,)
def post(self, request):
...
mime_type = 'application/zip'
file_name = '{}.zip'.format(random_string(20))
response = Response(data=in_memory_zip.read(), content_type=mime_type)
response['Content-Disposition'] = 'attachment; filename=%s' % "-".join(file_name.split())
return response
Я создал собственный класс Renderer ZipRenderer
class ZipRenderer(BaseRenderer):
media_type = 'application/zip'
format = 'zip'
charset = 'utf-8'
render_style = 'binary'
def render(self, data, accepted_media_type=None, renderer_context=None):
return data
Это нормально работает в случае успешного ответа. Но в случае исключения отказа в разрешении сообщения об ошибках также кодируются в двоичном коде и не отображаются надлежащим образом в формате JSON.
Когда я добавляю JSONRenderer
к renderer_classes
renderer_classes = (ZipRenderer, JSONRenderer)
Это отлично работает в случае исключения, но затем дает ошибку в случае успешного ответа.
Как я могу изменить рендерер на основе ответа?