장고 업데이트를 위해 UpdateView 를 쓰는데, 저장할때 먼가를 바꾸기 위해서 사용자 기능을 넣기 위해서는 함수를 오버라이딩을 해야 한다. 몇개 샘플로 남겨두자.
view 코드는 아래와 같다.
폼객체에 먼가를 수정을 가하고 싶다면 form_valid 오버라이딩 함수에서 instance 에 작업 하면 되겠다.
class FirmwareUpdateView(...UpdateView):
def form_valid(self, form):
print("form_valid override")
instance = form.save(commit=False)
print(self.request.FILES.items())
for filename, file in self.request.FILES.items():
print(filename, file, file.name, file.content_type, file.size)
# /uploads/ 경로 문자열이 빠진 업데이트할 파일 명만 알기 위해서 이 작업을 해야 함
instance.filename = file.name
return super().form_valid(form)
def dispatch(self, request, *args, **kwargs):
# if request.method == 'POST' and METHOD_OVERRIDE_HEADER in request.META:
# request.method = request.META[METHOD_OVERRIDE_HEADER]
if request.method == 'POST' :
print("dispatch override")
print(request.FILES.items())
for filename, file in request.FILES.items():
print(filename, file, file.name, file.content_type, file.size)
return super().dispatch(request, *args, **kwargs)
def post(self, request, **kwargs):
# request.POST = request.POST.copy()
print("post override")
print(request.FILES.items())
for filename, file in request.FILES.items():
print(filename, file, file.name, file.content_type, file.size)
return super().post(request, **kwargs)
로그를 찍어 보면 아래와 같다.
dispath
post
form_valid 순서로 불리나 보다
dispatch override
<generator object MultiValueDict.items at 0x000002027234AC80>
content naverband.png naverband.png image/png 4705
post override
<generator object MultiValueDict.items at 0x000002027234AC80>
content naverband.png naverband.png image/png 4705
is_valid 호출
form_valid override
<generator object MultiValueDict.items at 0x000002027234AC80>
content naverband.png naverband.png image/png 4705
Tsvetoslav Hristov 님의 사진, 출처: Pexels