유저 모델을 참조하는 회원가입form 을 사용할때 유저로 부터 회원가입 요청으로 받은 값을 검사하게 된다.
각 필드별 유효성을 검사하면서 form 인스턴스로 clean_<필드명> 이 존재할경우 해당 인스턴스 또한 동작하게 되는데 이를 이용해 가입시 받은 이메일이 기존 가입된 유저와 중복된 값이 아닌지 검사하는 기능을 구현해 보았다.
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import User
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):
model = User
# fields = ['username', 'email', 'first_name','last_name']
fields = ['username', 'email']
# 이메일 중복검사
def clean_email(self):
email = self.cleaned_data.get('email')
print(email)
if email:
qs = User.objects.filter(email=email)
print(qs)
if qs.exists():
raise forms.ValidationError("this email already exist.")
return email
clean_email() 을 통하여 입력받은 email 값을 기존 유저쿼리에서 해당값으로 filter 하여 존재유무를 파악하고, 이미 존재하는경우 ValidationError를 출력하는 형태로 처리하였다.