Объект HttpResponse не имеет атрибута data в DRF - PullRequest
1 голос
/ 29 мая 2020

Я определил URL-адрес в urls.py для экспорта некоторых данных как csv, используя Django 3.0.6 и djangorestframework 3.10.3

    re_path(
        r'^(?:v1/)?export/csv/$',
        api.ExportAPIView.as_view(),
        name='export'
    ),

А вот код api.py для обработки этого URL-адреса :

class ExportAPIView(APIView):

    def get(self, request, *args, **kwargs):
        http_response = HttpResponse(content_type='text/csv')
        http_response[
            'Content-Disposition'] = 'attachment; filename="somefilename.csv"'

        writer = csv.writer(http_response)
        writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
        writer.writerow(
            ['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])

        return http_response

Ответ этого кода должен быть простым csv файлом, содержащим две строки, но вместо этого я получаю эту ошибку:

AttributeError at /v1/export/csv/
'HttpResponse' object has no attribute 'data'

Обратите внимание, что я использовал renderer_classes = [CSVRenderer] от djangorestframework-csv и StreamingHttpResponse тоже не повезло. Так в чем же проблема, которую мне здесь не хватает?

1 Ответ

1 голос
/ 29 мая 2020

Пока установлено renderer_classes = [CSVRenderer], вы сможете использовать что-то вроде этого:

def get(self, request, *args, **kwargs):
    content = [
        ['First row', 'Foo', 'Bar', 'Baz'],
        ['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"]],
    ]
    response = Response(content)
    response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'

    return response
...