MultiValueDictKeyError는 dict에 일치하는 key가 없는 경우 발생할 수 있는 문제다.
request.FILES['file']로 데이터를 받아올 때 업로드된 파일이 있으면 dict에 file이 추가되어 제대로 작동되지만, 업로드된 파일이 없으면 dict에 file이 추가되지 않아 해당 오류가 발생한다.
upload.html
<input type="file" name="file" accept="image/*" id="id_file"> <!-- 이미지파일 업로드 -->
views.py
model.file= request.FILES['file']
request.FILES['file']을 request.FILES.get('file')로 변경해주면 일치하는 key가 없을 때 None이 반환되도록 하여 MultiValueDictKeyError가 나는 것을 방지할 수 있다.
하지만 이렇게 처리할 경우 파일을 업로드하지 않는 경우 파일이 유지되지 않고 무조건 초기화된다.
views.py
model.file= request.FILES.get('file')
파일을 새로 업로드하지 않은 경우 이전 파일을 유지하기 위해서
request.FILES.get('file')이 None인지를 체크한 후 None이 아닐 때만 업로드하도록 변경해주며 된다.
views.py
if request.FILES.get('file') is not None:
model.file= request.FILES.get('file')