Django serializer エラーメッセージのカスタマイズ方法
serializer.py
from rest_framework import serializers
from rest_framework.validators import UniqueValidator
from django.core.validators import EmailValidator
from models.users import Users
# serializers.ModelSerializerを継承する
class Serial(serializers.ModelSerializer):
# UniqueValidatorでUsersモデルに登録したいemailがすでに登録されたかをシリアライズする
# EmailValidatorでemailのフォーマットをシリアライズする
email = serializers.EmailField(validators=[UniqueValidator(queryset=Users.objects.all(), message="emailはすでに登録されました"),
EmailValidator(message="フォーマットが違います")])
# Usersモデルにないフィールドのシリアライズ
password = serializers.CharField(min_length=5, required=True, allow_blank=False,
error_messages={'min_length':"passwordは短いすぎます。","blank": "パスワードは必須です。", "required":"パスワードは必須です。"})
# class MetaでUsersモデルにあるフィールドをシリアライズできる
class Meta:
model = Users
# シリアライズしたいフィールドを全部fieldsに追加する
fields = ['name', 'email', 'password']
# max_length error & not null(required&blank) error, override extra_kwargs
extra_kwargs = {
"name": {"error_messages":
{"max_length": I0101,"required": I0105, 'blank': I0105}},
# UniqueValidatorやEmailValidatorはclass Metaでカスタマイズできないため、上記通りにserializers.EmailFieldで新しいシリアライザを作る必要がある
"email": {"error_messages":
{"max_length": "passwordは長すぎます。", "required": "emailは必須です。", 'blank': "emailは必須です。"}},
}