9분 56초 질문드립니다.
217
작성한 질문수 37
def form_valid(self, form):
temp_profile = form.save(commit=False)
temp_profile.user = self.request.user
temp_profile.save()
return super().form_valid(form)
이 부분 10번 돌려봐도 무슨 말인지 전혀 모르겠습니다...
들리는 대로 다 적어봤는데, 이렇게 말씀하셨는데
무슨 말인지 전혀 이해가 안 가서 그런데 좀...
쉽게 설명 부탁드려도 될까요?
#커스텀마이징하려는 내용. 괄호안의 form은 forms.py에서
날라온 데이터이며 (self, form)의 form에 저장된다.
#user라는 데이터가 아직 없다. temp_profile의 user라는 데이터를
self에서 request를 보는 당사자 유저로 정해준다.
그리고 나머지는 조상(부모클래스)의 원래 그거의
결과를 return해준다.
답변 1
1
안녕하세요.
질문 확인했습니다.
설명을 드리자면,
일단 해당 내용은 유저에게 입력받지 않았지만,
models.py 파일에 설정한 profile 의 속성 값을 지정해주기 위한 과정입니다.
위와 같은 화면을 통해 유저에게 입력을 받게 되는데,
여기에서 만드는 profile 이 어떤 유저에게 연결되어있는지는 유저에게 입력을 받지 않죠?
그래서 그 연결고리를 만들어주는 작업을 진행하는겁니다.
요청을 보낸 유저와 지금 만들어질 Profile 을 연결해주는거죠.
그 작업을 하기 위해 form_valid 메서드를 오버라이딩 하는겁니다.
form_valid 메서드는 유저가 보낸 모든 입력을 검증하고,
검증이 완료 된 이후 실행되는 메서드에요.
그러니까 정상적인 입력을 다 받았다고 확인한 이후에,
이 profile 과 연결될 유저가 누군지만 정해주는거죠.
def form_valid(self, form):
temp_profile = form.save(commit=False)
temp_profile.user = self.request.user
temp_profile.save()
return super().form_valid(form)
이때 form 이라는 변수에는 유저가 보낸 모든 입력들이 들어있습니다.
그래서 이 form 을 통해서 새로운 temp_profile 이라는 객체를 저장하되,
commt=False 옵션을 통해서 실제 DB 에 반영은 아직 안하도록 해놓는거에요.
그리고나서, temp_profile 에 설정될 user 값을 할당해주고 나서,
최종적으로 save() 메서드를 불러주고 실제 DB 에 반영시켜주는거죠.
그리고 마지막으로 불러주는 super().form_valid(form) 같은 경우에는,
원래 부모 클래스에 작성되어있는 form_valid 가 하던 작업을 그대로 다시 하는거구요.
그러니까, 원래 form_valid 메서드가 실행되고, Response를 되돌려 보내주는 작업이 연결되어있겠죠?
그걸 저희가 다시 작성하기는 번거롭기 때문에 이전에 작성되어있던 부모 클래스 메서드를 호출하는 겁니다.
답변이 도움이 되셨길 바랍니다.
좋은하루 보내시구요!
감사합니다-
0
설명 감사합니다. 궁금한게 있는데요 추가로.
최종적으로 super().form_valid 에서 또 form.save() 하는것 같은데, 이것 역시 실제 DB에 반영 하는 것이라면
def form_valid(self, form):
"""If the form is valid, save the associated model."""
self.object = form.save()
return super().form_valid(form)
같은 데이터를 두 번 반영하는 비효율이 생기는 것 같은데 맞나요?
강의에 나왔던 js 파일이 깃허브에 없습니다
1
79
1
모바일 디버깅, 반응형 레이아웃 4분48초 질문
0
57
1
decorator 관련질문입니다.
0
63
1
PasswordChangeView
0
104
2
로그아웃뷰 작동 관련 (2025년 3월)
1
138
1
실행에러질문
0
159
1
@login_required 데코레이터 사용시 리다이렉트는 어디서 참조하여 설정을 하는걸까요?
0
116
1
CacheBackend 관련 에러
0
181
1
21강 CreateView를 통한 회원가입 구현 질문
0
326
1
53강 disallowedhost
0
346
2
502 Bad Gateway
0
474
0
mariadb 접근권한 오류
0
546
1
logout 후 빈 화면으로 이동합니다 ㅠㅠ
0
461
2
로그아웃 후 빈 화면으로 이동
0
333
1
서버 운영 관련 질문 드립니다.(Unable to retirve...)
0
232
1
static/base.css파일을 인식을 못합니다
0
383
1
안녕하세요 19강 디버깅 설정 질문있습니다.
0
291
1
프로필 update편 질문있습니다.
0
380
1
수업질문
0
395
1
COOP error
0
531
1
61강 Dockerfile error
0
598
1
static안에 base.css 에서 정의한 클래스가 적용되지 않습니다.
0
491
1
static 파일 중 jpg 파일만 로드 불가
0
419
1
58강 static 파일 적용 안됨
0
547
1





