При попытке доступа к файлу 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", я получил результат.