скачать ZIP-файл с данными из нескольких моделей в формате CSV - PullRequest
0 голосов
/ 05 июня 2018

Я использую Django 2.0

Мне нужно загрузить данные из нескольких моделей в формате csv в виде zip-файла.

Я использую плагин django-import-export для генерации csv файл для данных модели

Что я делаю, это

def download_all_data(request):
    # user data
    user_resource = UserResource()
    queryset = User.objects.filter(username=request.user)
    data_set = user_resource.export(queryset)

    # favourite arbitrase
    favourite_arbitrase_resource = FavouriteArbitraseResource()
    favourite_arbitrase_queryset = FavouriteArbitrase.objects.filter(user=request.user)
    data_set_favourite_arbitrase = favourite_arbitrase_resource.export(favourite_arbitrase_queryset)

    response_user_data = HttpResponse(data_set.csv, content_type='text/csv')
    response_user_data['Content-Disposition'] = 'attachment; filename="user_data.csv"'

    response_favourite_arbitrase = HttpResponse(data_set_favourite_arbitrase.csv, content_type='text/csv')
    response_favourite_arbitrase['Content-Disposition'] = 'attachment; filename="favourite_arbitrase_data.csv"'

    zipped_file = io.BytesIO()
    with zipfile.ZipFile(zipped_file, 'w') as zip_file:
        zip_file.writestr('text/csv', response_user_data)
        zip_file.writestr('text/csv', response_favourite_arbitrase)

    zip_response = HttpResponse(zipped_file, content_type='application/octet-stream')
    zip_response['Content-Disposition'] = 'attachment; filename=my_file.zip'
    return zip_response

Это дает ошибку

object of type 'HttpResponse' has no len()

1 Ответ

0 голосов
/ 05 июня 2018

Вам нужно поместить фактические данные в zip, а не в комплекте HttpResponse.

И в соответствии с ZipFile.writestr docs , первый аргумент - это имя, которое будетиспользуется для данных.

Вы могли бы что-то вроде этого:

zipped_file = io.BytesIO()
with zipfile.ZipFile(zipped_file, 'w') as zip_file:
    zip_file.writestr('user.csv', data_set.csv)
    zip_file.writestr('favourite.csv', data_set_favourite_arbitrase.csv)
...