При попытке доступа к файлу excel возникает ошибка

КОД

import openpyxl

class FileView(APIView):
    parser_classes = (MultiPartParser, FormParser)
    permission_classes = [IsAdminUser]

def post(self, request, *args, **kwargs):
    '''
    API user to import hospital's adimission data in bulk, using xls file
    '''
    
    # getting the excel file
    # try:
    #     excel_file = request.FILES["excel_file"]
    # except:
    #     return Response({'err_msg': 'bad request'}, status=status.HTTP_400_BAD_REQUEST)
    
    excel_file = request.FILES["excel_file"]
    
    wb = openpyxl.load_workbook(excel_file)
    # getting a particular sheet by name out of many sheets
    worksheet = wb['Sheet1']
    # excel_data = []
    print(worksheet)

Ошибка

Внутренняя ошибка сервера: /file/upload/ Traceback (последний последний вызов): File "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\django\utils\datastructures.py", line 76, in getitem. list_ = super().getitem(key) KeyError: 'excel_file'

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (последний последний вызов): File "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request) Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\django\core\handlers\base.py", строка 181, в _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\django\views\decorators\csrf.py", строка 54, в wrapped_view return view_func(*args, **kwargs) Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\django\views\generic\base.py", строка 70, in view return self.dispatch(request, *args, **kwargs) Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\rest_framework\views.py", строка 509, в dispatch response = self.handle_exception(exc) Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\rest_framework\views.py", строка 469, в handle_exception self.raise_uncaught_exception(exc) Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\rest_framework\views.py", строка 480, в raise_uncaught_exception raise exc Файл "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\rest_framework\views.py", строка 506, в dispatch response = handler(request, *args, **kwargs) Файл "G:\office\medicover\medicover_bloodbank_django\file_app\views.py", строка 27, в post excel_file = request.FILES["excel_file"] File "G:\office\medicover\medicover_bloodbank_django\venv\lib\site-packages\django\utils\datastructures.py", line 78, in getitem raise MultiValueDictKeyError(key) django.utils.datastructures.MultiValueDictKeyError: 'excel_file' [07/Jul/2022 06:50:29] "POST /file/upload/ HTTP/1.1" 500 103875

Ошибка возникла в результате использования этой строки кода:- excel_file = request.FILES["excel_file"]

Как мы видим, я передаю "excel_file". Однако, это должен быть "файл", например, так:- excel_file = request.FILES["file"]

Причина в том, что я пытаюсь получить доступ к "MultiValueDict". Это словарь с несколькими значениями, и здесь это файл excel, к которому я пытаюсь получить доступ. Но вместо того, чтобы указать "ключ", я указал значение "excel_file", а мы все знаем, что для доступа к значениям внутри словаря необходимо указать "ключ".

Итак, просто изменив "excel_file" на "file", я получил результат.

Вернуться на верх