Как загрузить файлы с помощью xlsxwriter в django views.py

def download_fild(request):
    output = io.BytesIO()
    workbook = xlsxwriter.Workbook(output)
    worksheet = workbook.add_worksheet()
    merge_format = workbook.add_format({'align': 'center', 'valign': 'vcenter'})

    supportings = Supporting.objects \
        .annotate(date_str=Cast(TruncDate('date'), CharField())) \
        .values_list('ldate_str', 'date_str', 'study_name',
                 'student_register_number', 'student__name', 'student__no', 'date_str', 'kinds', 'teahcer', 'comment')



    supportings = pd.DataFrame.from_records(supportings)
    supportings = supportings.rename(columns={0: 'Day',
                                          1: 'Date',
                                          2: 'Study name',
                                          3: 'Register Number',
                                          4: 'Name',
                                          5: 'No',
                                          6: 'Time',
                                          7: 'Kinds',
                                          8: 'Teacher',
                                          9: 'Comment'})



    for supporting in supportings['Day'].unique():
        # find indices and add one to account for header
        u = supportings.loc[supportings['Day'] == supporting].index.values + 1

        if len(u) < 2:
            pass  # do not merge cells if there is only one supporting days
        else:
            # merge cells using the first and last indices
            worksheet.merge_range(u[0], 0, u[-1], 0, supportings.loc[u[0], 'Day'], merge_format)

    workbook.close()
    output.seek(0)

    supportings.set_index(supportings.columns[:-1].tolist()).to_excel('success.xlsx')

Q. Если я запускаю код до этого момента в jupyter notebook, функция работает нормально, и я проверил файл загрузки в папке. Однако, поскольку возвращаемое значение должно быть введено в django's views.py, необходимо добавить код ниже. Однако, если я добавляю приведенный ниже код, загрузка файла возможна, но последний код "supportings.set_index(supportings.columns[:-1].tolist()).to_excel('success.xlsx')" не применяется, поэтому данные файла отсутствуют, когда я его открываю. В чем может быть причина?

    filename = 'Register.xlsx'

    try:
        filename.encode('ascii')
        file_expr = 'filename="{}"'.format(filename)
    except UnicodeEncodeError:
        file_expr = "filename*=utf-8''{}".format(quote(filename))

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

    return response
Вернуться на верх