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
Вернуться на верх