Я создал программу, которая выполняет ввод данных и возвращает таблицу pandas (информация сохраняется в списке, называемом JOB_INFO, вверху файла views.py - я прикреплю это ниже) с некоторыми результатами. который можно скачать. У меня также есть рендеринг таблицы на странице html, которая имеет форму ввода данных - таблица отображается ниже формы и обновляется (добавляется) при каждом вводе пользователем (отправка формы). Это отлично работает в разработке на моей локальной машине, но когда она успешно развернута на heroku, она начинает действовать и ведет себя не так, как ожидалось.
Примеры включают: Не обновлять таблицу - кажется, что форма отправляется, но таблица не обновляется. Если я продолжу пытаться, это внезапно сработает. Но потом я попробую другой, и предыдущий исчезнет, и в таблице появится только последний. Это кажется таким случайным. Не очищать список - у меня есть кнопка для очистки таблицы, но она тоже не работает. Если я нажму кнопку много раз, она может работать внезапно. Но затем случайно в таблице снова появится некоторая информация, которая, как я думал, была очищена! Информация в загруженном файле, когда я подумал, что очистил ее, - это само собой разумеется.
В двух словах, назвать его случайным - это, вероятно, лучший способ описать его. Он просто не делает то, что я хочу, и чего от него ожидают.
views.py
from django.shortcuts import render, redirect, get_object_or_404, reverse, HttpResponse
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from .models import Data
from .forms import DataForm, SearchAndUpdateForm
from io import BytesIO
import pandas as pd
import xlsxwriter
JOB_INFO = {
"Plentific Job Number": [],
"WorkOrder Number": [],
"Invoice Number Found": [],
"Payments": [],
"Job Number Exists": [],
}
def data_entry(request):
"""
Creates new instance of data entry form and renders it on html page
along with a report table, which updates with each data entry input
"""
form = SearchAndUpdateForm()
df = pd.DataFrame(JOB_INFO,
columns=[
"Plentific Job Number",
"WorkOrder Number",
"Invoice Number Found",
"Payments",
"Job Number Exists",
])
if not df.empty:
df_html = df.to_html(classes="table table-striped table-hover")
return render(request, "data_entry.html", {
"form": form, "df_html": df_html})
else:
return render(request, "data_entry.html", {
"form": form})
def export_job_info_report(request):
"""
Exports the job_info list as an Excel spreadsheet
and saves it to user's local directory
"""
df = pd.DataFrame(JOB_INFO)
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
df.to_excel(writer, sheet_name='report', index=False)
writer.save()
output.seek(0)
response = HttpResponse(output,
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % 'Download'
return response
def clear_report_info(request):
"""Empties the job_info dictionary"""
JOB_INFO["Plentific Job Number"].clear()
JOB_INFO["WorkOrder Number"].clear()
JOB_INFO["Invoice Number Found"].clear()
JOB_INFO["Payments"].clear()
JOB_INFO["Job Number Exists"].clear()
return redirect(reverse(data_entry))
html page
{% extends "base.html" %}
{% block content %}
{% load crispy_forms_tags %}
<div class="jumbotron">
<h1>Data Entry Tool:</h1>
<form action="{% url 'search_update_feedback' %}" method="GET">
{{ form|crispy }}
<button class="btn btn-success" type="submit" data-toggle="tooltip" data-placement="right" title="Updates the database with the info provided above">
Update and Fetch Info
</button>
</form>
<br>
<form action="{% url 'export_job_info_report' %}" method="GET">
<button class="btn btn-success" type="submit" data-toggle="tooltip" data-placement="right" title="Downloads the report below in .xlsx format">
Download Report
</button>
</form>
<br>
<form action="{% url 'clear_report_info' %}" method="GET">
<button class="btn btn-success" type="submit" data-toggle="tooltip" data-placement="right" title="Warning! You will lose all of the data below (does not affect database data)">
Clear Report - hover over me!
</button>
</form>
</div>
<hr>
{{ df_html | safe }}
{% endblock %}
urls
urlpatterns = [
path("", data_entry, name="data_entry"),
path("export_job_info_report/", export_job_info_report, name="export_job_info_report"),
path("clear_report_info/", clear_report_info, name="clear_report_info"),
]
Конечно, я упустил множество функций, чтобы сэкономить время на чтение, но, пожалуйста, дайте мне знать, если что-то еще можно / нужно добавить, чтобы помочь понять проблему. Любая помощь будет принята с благодарностью.