Django REST Frameworkに再挑戦 その19 Serializer Validation
概要
Django REST Frameworkに再挑戦 その19 Serializer Validation
参考サイト
www.codingforentrepreneurs.com
Serializer Validation
- serializers.pyにコードを追記する。
... class UserCreateSerializer(ModelSerializer): email = serializers.EmailField(label='Email Address') #emailフィールドのserializerによる上書き email2 = serializers.EmailField(label='Confirm Email') #confirm用のフィールド。 class Meta: model = User fields = [ 'username', 'email', 'email2', 'password', ] extra_kwargs = {"password": {"write_only": True} } def validate_email2(self, value):#validate_フィールド名で、validationをセットできるぽい。 data = self.get_initial() email1 = data.get("email") email2 = value if email1 != email2: raise ValidationError("Emailが一致していません。") return value ....
- 次は、重複したemailの登録がないかをvalidateする。
def validate(self, data): email = data['email'] user_qs = User.objects.filter(email=email) if user_qs.exists(): raise ValidationError("すでにこちらのアドレスは登録されています。") return data
- これをvalidate_emailに含める。
def validate_email(self, value):#validate_フィールド名で、validationをセットできるぽい。 data = self.get_initial() email1 = data.get("email2") email2 = value if email1 != email2: raise ValidationError("Emailが一致していません。") user_qs = User.objects.filter(email=email2) if user_qs.exists(): raise ValidationError("すでにこちらのアドレスは登録されています。") return value