2016-08-24 3 views
1

Желаемый результат - экспортировать таблицу всех пользователей в базе данных, а не экспортировать их сразу - разбить пользователей на 3 группы и экспортировать каждую из этих групп в качестве распространение листа.Возвратите несколько объектов HttpResponse, которые являются электронными таблицами Excel

Я использую xlsxwriter и StringIO

До сих пор код возвращается только первый объект HttpResponse из 3 (аки первой порции пользователей). Я попытался использовать StreamingHttpResponse, но считаю, что я неправильно использовал его/это не подходит для этой задачи.

Вопрос: Можно ли вернуть несколько таблиц за один ответ? Если нет, было бы лучше всего называть эту функцию несколько раз, раз для каждой группы пользователей? (после первого комментария)

Большое спасибо!

код ниже:

def export_users(request): 
# all users 
users = User.objects.all() 
# breaks up all users into 3 groups 
user_groups = [users[x:x+2] for x in xrange(0, len(users), 2)] 

# FUNCTIONALITY NOTES --> idea is to split number of users for exporting into groups of 3 then export each group. right now it stops after the first group 


# list var for storing all responses 
full_response = [] 

for group in user_groups: 
    response = HttpResponse(content_type='application/vnd.ms-excel') 
    response['Content-Disposition'] = 'attachment; filename=UserReport.xlsx' 

    # user group 
    print "group! ---> %s"%(group) 

    # creates data variable to write to response 
    xlsx_data = WriteToExcel(group) 
    response.write(xlsx_data) 

    # appending each response to an array 
    full_response.append(response) 
    print len(full_response) 

# all response objects 
print full_response 

# returning one here 
return response 

# non-functioning attempt to return all responses 

# for response in full_response: 
#  print response 
#  return response 
+0

Вы можете вернуть ровно один отклик на ваш взгляд. Если вам нужно несколько ответов, вам также необходимо сделать несколько запросов из браузера. – knbk

+1

Вы не можете этого сделать. В процессе работы вы можете сохранить файл в своей статической папке и вернуть путь к всем файлам. При получении ответа клиент может открыть (или загрузить) все файлы –

+0

@MoinuddinQuadri - Звучит многообещающе! Не знакомы с сохранением файлов в статической папке: не могли бы вы, возможно, ответить на вопрос? – Dan

ответ

1

Вы не может возвращать несколько объектов HttpResponse с одного вызова API. Однако в качестве обходного пути, вы можете:

  • Подход 1: Если содержание будет всегда динамичны и ссылка на файл не требуется в будущем: сделать несколько запроса каждого возвращения HttpResponse

  • Подход 2: Если контент будет статичным, и вам может понадобиться тот же файл в будущем: Сделайте один запрос, загрузите файл в aws s3, google cloud storage, или на вашем сервере. Верните путь к каждому файлу с ответом и загрузите этот файл со стороны клиента.

Смежные вопросы