Выберите «Извлечь строки из отношения с некоторым условием», а «Проект» извлечет определенное количество атрибута / столбца из отношения с некоторым условием или без него.
Чтобы инициировать загрузку, вам нужно установить заголовок Content-Disposition
:
from django.http import HttpResponse
from wsgiref.util import FileWrapper
# generate the file
response = HttpResponse(FileWrapper(myfile.getvalue()), content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=myfile.zip'
return response
Если вы не хотите, чтобы файл на диске, вам нужно использовать StringIO
import cStringIO as StringIO
myfile = StringIO.StringIO()
while not_finished:
# generate chunk
myfile.write(chunk)
При желании вы также можете установить заголовок Content-Length
:
response['Content-Length'] = myfile.tell()
Да, вы можете использовать модуль zipfile , модуль zlib или другие модули сжатия для создания zip-архива в памяти . Вы можете заставить ваше представление записывать zip-архив в объект HttpResponse
, который возвращает представление Django, вместо отправки контекста в шаблон. Наконец, вам необходимо установить для параметра mimetype соответствующий формат, чтобы указать браузеру обрабатывать ответ как файл .
Вам будет удобнее создать временный файл. Это экономит много памяти. Если у вас одновременно работает более одного или двух пользователей, вы обнаружите, что экономия памяти очень и очень важна.
Однако вы можете записать в объект StringIO .
>>> import zipfile
>>> import StringIO
>>> buffer= StringIO.StringIO()
>>> z= zipfile.ZipFile( buffer, "w" )
>>> z.write( "idletest" )
>>> z.close()
>>> len(buffer.getvalue())
778
Буфер " "объект похож на файл с ZIP-архивом 778 байт.