inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

Profileapp 구현 시작

9분 56초 질문드립니다.

217

퀀텀코더

작성한 질문수 37

0

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해준다.


python django docker

답변 1

1

Hyong Sok Park

안녕하세요.
질문 확인했습니다.

설명을 드리자면,
일단 해당 내용은 유저에게 입력받지 않았지만,
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