Экспорт моделей Django в Excel (разные листы) с помощью Django-tables2

Я просмотрел документацию по django-tables2, но не нашел простого способа экспорта моделей на разные листы в Excel. Чтобы упростить задачу, предположим, что у меня есть две разные модели: Продажи и Продукты. Я хотел бы экспортировать документ Excel с двумя разными листами: Продажи и Продукты. Я могу экспортировать первую модель с помощью кода, показанного ниже, но я не уверен, есть ли способ экспортировать модель Products на другой лист. Любая помощь будет оценена по достоинству.


export_format = request.GET.get('_export', None)

if TableExport.is_valid_format(export_format):
        table = [[Sales Table Object]]
        exporter = TableExport(export_format, table)
        return exporter.response('File_Name.{}'.format(export_format)) ```

Итак, я пришел к простому решению, возможно, не самому эффективному, с помощью pandas. Преобразуйте набор запросов в pandas dataframe и используйте pandas ExcelWriter для генерации excel, причем это можно делать для разных листов. Возможно, для развертывания с большими данными лучше использовать библиотеки типа xlsxwriter, но это работает для того, что я хотел сделать.

    iden= request.GET["id"]
    output = BytesIO()
    queryset = Efectivo.objects.filter(Q(id1=iden)).values()
    df = pd.DataFrame(queryset)
    writer = pd.ExcelWriter(output,engine='xlsxwriter')
    df.to_excel(writer,sheet_name='Efectivo')
    writer.save()
    output_name = 'example'
    output.seek(0)
    response = HttpResponse(output, 
    content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    response['Content-Disposition'] = f'attachment; filename={output_name}.xlsx'
        
    
    return response```

Попробуйте использовать xlsxwriter:

response = HttpResponse(content_type='application/vnd.ms-excel')
# tell the browser what the file is named
response['Content-Disposition'] = 'attachment;filename="file_name.xlsx"'
writer = pd.ExcelWriter(response, engine = 'xlsxwriter')
#d1 and d2 are pandas dataframe 
d1.to_excel(writer, sheet_name='Sheet1',index=False)
d2.to_excel(writer, sheet_name='Sheet2',index=False)
writer.save()
Вернуться на верх