Как писать имена строк при экспорте кверисетов django в csv?
Нижеприведенная функция экспортирует в csv правильно, но не хватает одной вещи - заголовка этих значений.
Как записать заголовок этих значений?
У меня довольно большой набор запросов, поэтому я использую StreamingHttpResponse
, как предлагает документация django, но не смог найти решение для добавления заголовка этих значений.
class Echo:
def write(self, value):
return value
def some_streaming_csv_view(request):
rows = MyModel.objects.values_list("value1", "value2")
pseudo_buffer = Echo()
writer = csv.writer(pseudo_buffer)
writer.writerow(["name1", "name2"]) # didn't work
response = StreamingHttpResponse(
(writer.writerow(row) for row in rows),
status=200,
content_type="text/csv",
)
response["Content-Disposition"] ='attachment; filename=filname.csv'
return response
Чтобы иметь возможность добавить часть заголовка, которую вы пытаетесь, вы должны записать их в псевдобуфер и выдать их.
def iter_content(rows, headers):
pseudo_buffer = Echo()
writer = csv.writer(pseudo_buffer)
yield pseudo_buffer.write(headers)
for row in rows:
yield writer.writerow(row)
и затем использовать его следующим образом:
response = StreamingHttpResponse(
(iter_content(rows, headers)),
status=200,
content_type="text/csv",
)