0
DjangoのStreamingHttpResponseを使用して、大規模なCSVファイルをオンザフライでストリーミングしています。 the docsによると、反復子は、応答のstreaming_content
パラメータに渡されます。ストリームを手動でStreamingHttpResponse(Django)に追加する
import csv
from django.http import StreamingHttpResponse
def get_headers():
return ['field1', 'field2', 'field3']
def get_data(item):
return {
'field1': item.field1,
'field2': item.field2,
'field3': item.field3,
}
# StreamingHttpResponse requires a File-like class that has a 'write' method
class Echo(object):
def write(self, value):
return value
def get_response(queryset):
writer = csv.DictWriter(Echo(), fieldnames=get_headers())
writer.writeheader() # this line does not work
response = StreamingHttpResponse(
# the iterator
streaming_content=(writer.writerow(get_data(item)) for item in queryset),
content_type='text/csv',
)
response['Content-Disposition'] = 'attachment;filename=items.csv'
return response
私の質問は:どのように私は手動でCSVライターに行を書き込むことができますか? writer.writerow(data)またはwriter.writeheader()(内部でwriterow()を呼び出す)を手動で呼び出すと、データセットに書き込まれないようになり、streaming_contentからの生成/ストリームデータのみが出力データセットに書き込まれます。