Исправление долго выполняющейся задачи фильтрации в представлениях django
input_df = pd.read_excel(uploadedfile)
variable_column = code
search_type = 'icontains'
filter = variable_column + '__' + search_type
li = []
for i in input_df["KT_DB"]:
qset=KT_DB.objects.filter(**{ filter: i})
df = pd.DataFrame.from_records(qset.values())
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
with BytesIO() as b:
# Use the StringIO object as the filehandle.
writer = pd.ExcelWriter(b, engine='xlsxwriter')
frame.to_excel(writer, sheet_name = 'Sheet1', index = False)
writer.save()
filename = 'KW'
content_type = 'application/vnd.ms-excel'
response = HttpResponse(b.getvalue(), content_type=content_type)
response['Content-Disposition'] = 'attachment; filename="' + filename + '.xlsx"'
return response
здесь, фильтруя несколько ключевых слов из таблицы базы данных, требуется больше времени для выполнения. получение тайм-аута запроса перед выполнением функции.
Вы должны сделать это в другой теме, это, вероятно, лучше.
Celery With Django for Background Task, что означает обработку файла excel с помощью задачи celery: https://docs.celeryq.dev/en/stable/getting-started/introduction.html. Вы можете показать другое решение в этой теме: Django Background Task
ИЛИ
В качестве быстрого хака, вы можете использовать async задачу с django. Вывести пользователю сообщение "обработка", ожидая, что файл доступен...
Никогда не тестировал, но эта библиотека тоже существует: https://django-q.readthedocs.io/en/latest/configure.html