인프런 커뮤니티 질문&답변

김영빈님의 프로필 이미지
김영빈

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

커스텀 유저 지정 및 회원가입 구현

clean_field 함수에 대하여 질문입니다.

작성

·

325

1

안녕하세요? 강의 잘 듣고 있습니다.
해당 강의의 SignupForm부분에서 clean_email에 대해 질문입니다.
 
class SignupForm(UserCreationForm):
    def  __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True
   
    class Meta(UserCreationForm.Meta):
        #Meta도 usercreationform의 메타이기 때문
        model = get_user_model()
        fields = ['username','email','first_name','last_name']

        #form이 제출될 때, clean_field형식의 함수들이 자동으로 호출이 됨?
        def clean_email(self):
            email = self.cleaned_data.get('email')
            if email:
                qs = User.objects.filter(email=email)
                if qs.exists():
                    raise forms.ValidationError("이미 등록된 이메일 주소입니다.")
            return email
 
1. 폼이 제출될 때, 모든 폼들의 데이터에 대해 유효성 검사가 완료되고, 완료된 결과가 cleand_data에 딕셔너리 형태로 담기는 것인가요?
 
2. 유효성 검사가 끝이나고(cleanded_data가 다 종료되고) clean_field 형태의 함수가 자동으로 호출이 되는건가요?
 
3. 마지막으로 clean_email함수에서 유효성검사가 끝이나면 email을 반환하는데요
반환된 email이 모델폼의 인스턴스, 그러니까 한행의 데이터에 바로 들어가는 로직이 궁금한데, 찾아봐도 잘 모르겠습니다 ㅠㅠ
 
 
 
 

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

1. form.cleaned_data는 유효성 검사가 시작되는 시점에 빈 사전으로 초기화가 되며, 유효성 검사 과정에서 각 필드에 대한 값들이 업데이트됩니다.

관련 코드 : https://github.com/django/django/blob/4.0.3/django/forms/forms.py#L427

2. 유효성 검사 과정에서 각 Form Field별 유효성 검사를 수행한 후에, Form 인스턴스에 clean_필드명 이름의 속성이 있을 경우, 이를 호출합니다.

관련 코드 : https://github.com/django/django/blob/4.0.3/django/forms/forms.py#L448

3. 위 2번의 장고 코드를 확인해보세요. clean_필드명 멤버함수의 반환값이 cleaned_data에 반영되고 있습니다.

코드를 차근차근 살펴보세요.

좋은 질문 감사드립니다.

화이팅입니다. :-)

 

김영빈님의 프로필 이미지
김영빈

작성한 질문수

질문하기