DJANGO Неверный путь к файлу или тип объекта буфера: <class 'django.db.models.query.QuerySet'>
Моя цель - прочитать содержимое рабочего листа, загруженного пользователем, и применить к нему функцию. Пока что загрузка работает идеально, и я вижу файл на сервере. Однако каждый раз, когда я пытаюсь выбрать файл из списка, я получаю эту ошибку:
Недопустимый путь к файлу или тип объекта буфера: <class 'django.db.models.query.QuerySet'>
Вот представление, которое обрабатывает выбор файла в шаблоне и возвращает файл excel, где данные были обработаны для загрузки (например, если я хочу отфильтровать все дубликаты и вернуть чистые данные, я загружаю лист excel и возвращаю отфильтрованный файл excel):
# get file run func on it and return new excel file, view needs to handle url
def dataprocess(self, pk):
data = Worksheet.objects.filter(pk=pk)
df = pd.read_excel(data, engine='xlrd')
#finishdata = dataprocessor(df) // ignore this part for now.
print("HERE---------------------->", df.url)
# return excel file
response = HttpResponse(content_type='application/vnd.ms-excel')
# tell the browser what the file is named
response['Content-Disposition'] = 'attachment;filename="ezpassreport.xlsx"'
# put the spreadsheet data into the response
response.write(df.getvalue())
return response
Это страница HTML:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Select Report
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
{% for i in worksheet %}
<a href="{% url 'ezpass:dataprocess' i.pk %}">{{i.worksheet}}</a><br>
{% endfor %}
</div>
И ссылки на всякий случай:
from ezpass.views import ezpass, file_upload, dataprocess
from django.urls import path
app_name = 'ezpass'
urlpatterns = [
path('ezpass/', ezpass, name="ezpass"),
path('upload/', file_upload, name='upload'),
path('dataprocess/<int:pk>', dataprocess, name='dataprocess')
]
Вот как я это исправил.
#handles the download and data processing of the ezpass data
def dataprocess(self, pk):
data = Worksheet.objects.get(pk=pk)
path = data.worksheet.path
df = pd.read_excel(os.path.join(BASE_DIR, path), engine='openpyxl')
finishdata: pd = dataprocessor(df)
# return excel file
response = HttpResponse(content_type='application/vnd.ms-excel')
# tell the browser what the file is named
response['Content-Disposition'] = 'attachment;filename="ezpassreport.xlsx"'
# put the spreadsheet data into the response
response.write(finishdata)
return response