Почему xlsxwriter экспортирует данные в моей базе данных из Django admin в Excel в неправильном порядке?

#django #excel #export #xlsxwriter

#django #excel #экспорт #xlsxwriter

Вопрос:

Я использую xlsxwriter для экспорта содержимого моей базы данных из Django admin в файл Excel. Заголовки в файле Excel должны быть именами полей моей модели, за которыми следуют строки данных из моей базы данных. Я запустил процесс экспорта, однако, когда я открываю загруженный файл Excel, он показывает все столбцы / данные из моей базы данных в кажущемся случайном порядке. Они не отображаются в том же порядке, что и поля, которые видны в Django admin. В Django admin информация отображается в правильном порядке таблицы,

Столбец A — Столбец B — Столбец C — Столбец D — Столбец E — и т.д.

в то время как в моем экспортированном файле Excel я вижу, что все это перемешано,

Столбец B — Столбец E — Столбец A — Столбец D — Столбец C — и т.д.

Вот мой код. Я не понимаю, почему он не экспортирует имена столбцов и данные в правильном порядке. Любая помощь приветствуется!

 def dump_attorneys_to_xlsx(request):
    if request.GET.get('export'):
        output = BytesIO()
        workbook = xlsxwriter.Workbook(output, {'in_memory': True})
        worksheet = workbook.add_worksheet('Summary')

        attorneys = Attorney.objects.all().values()
        # Write header
        worksheet.write_row(0, 0, attorneys[0].keys())
        # Write data
        for row_index, row_dict in enumerate(attorneys, start=1):
            worksheet.write_row(row_index, 0, row_dict.values())
        workbook.close()

        output.seek(0)

        response = HttpResponse(output.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=summary.xlsx'

        return response
    else:
        return render("change_list.html",
                      context_instance=RequestContext(request),
                      template_name='change_list.html')
  

Ответ №1:

values() возвращает строки в виде списка словарей. В Python словари неупорядочены.

Комментарии:

1. Аааа, это все объясняет! Есть ли способ отсортировать словари так, чтобы они соответствовали порядку полей модели Django?