Как писать имена строк при экспорте кверисетов 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",
)
    
Вернуться на верх