@ktsbee

Как сохранить файл excel в базу данных?

У меня формируется и скачивается отчёт по кнопке на компьютер, мне нужно, чтобы файл записывался в БД
Вот моя view
def download_excel(request):
    cats = Cat.objects.all()
    wb = Workbook()
    ws = wb.active
    ws.column_dimensions['B'].width = 75
    ws.column_dimensions['C'].width = 35
    ws.column_dimensions['D'].width = 35

    first_cat = True
    for cat in cats:
        if not first_cat:
            ws.append([])
        ws.append([cat.name])
        ws.merge_cells(start_row=ws.max_row, start_column=1, end_row=ws.max_row, end_column=6)
        ws.cell(row=ws.max_row, column=1).alignment = Alignment(horizontal='center')

        if first_cat:
            ws.append(['#', 'Виды работ', 'Единица работы', "Норма времени в часах", "План", "Факт"])
            first_cat = False

        cat_sections_data = [
            [index + 1, section.name, section.unit, section.hours, section.plan, section.actual]
            for index, section in enumerate(cat.sections.all())
        ]
        for row in cat_sections_data:
            ws.append(row)

    response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    response['Content-Disposition'] = 'attachment; filename="cats_sections.xlsx"'
    wb.save(response)
    return response

Страница с кнопкой
<div class="content-section">
        <h2>Категории</h2>
    {% if not user|has_group:"User" %}
        <a href="{% url 'download_excel' %}" class="btn btn-primary">Отчет</a>
    {% endif %}
        <ul>
            {% for cat in cats %}
              <li>
               <a href="{% url 'cat_detail' cat.id %}">{{ cat.name }}</a>
              </li>
            {% endfor %}
        </ul>
    </div>
{% endblock content %}
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
Чтобы записать в базу данных, нужно сохранить эту базу.
У вас сейчас открыта одна база Cat.
Вы оттуда импортируете все данные cats = Cat.objects.all().
Эти данные затем вставляются в excel и скачиваются.
Что вы хотите записать в БД? Сам файл?
Если бы у вас появились новые данные, то записываете её в переменную cats и сохраняете cats.save().
Если нужно сохранить файл на компьютере (сервере), то wb.save()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы