【问题标题】:How to customize the validation error messages of ModelSerializer?如何自定义 ModelSerializer 的验证错误信息?
【发布时间】:2020-01-03 20:39:10
【问题描述】:

我创建了一个名为 RegistrationSeriaizer 的序列化器,它继承了 ModelSerializer。我想自定义序列化程序生成的默认错误消息。

我想让 ModelSrializer 生成验证以返回我的自定义错误消息。不是默认的。

# This is my model.
class Person(AbstractBaseUser):
"""
A custom User model that represents users
"""
    GENDER_CHOICES = [
        ('M', 'Male'),
        ('F', 'Female'),
    ]
    first_name = models.CharField(_("First name of User"), max_length=50)
    last_name = models.CharField(_("Last name of User"), max_length=50)
    country_code = CountryField(_("Country code of User"), max_length=10)
    # Using phonenumber_field third package to
    # define phonenumber in E.164 format
    phone_number = PhoneNumberField(_("Phone number of User"), unique=True)
    gender = models.CharField(_("Gender of User"), max_length=1,
                          choices=GENDER_CHOICES)
    birth_date = models.DateField(_("Birth date of User"))
    avatar = models.ImageField(_("Image of User"), upload_to='images/')
    email = models.EmailField(_("Email of User"), blank=True, unique=True,
                          max_length=255)
    objects = PersonManager()
    USERNAME_FIELD = 'phone_number'
    REQUIRED = [
        'first_name', 'last_name',
        'country_code', 'gender',
        'birth_date', 'avatar',
    ]

    def __str__(self):
        return self.first_name + ' ' + self.last_name




# This is my serializer
class RegistrationSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        exclude = ['last_login']

我希望验证错误消息如下所示。

{ "errors": { "first_name": [ { "error": "blank" } ], "last_name": [ { "error": "blank" } ], "country_code":[ { "error": "inclusion" } ], "phone_number": [ { "error": "blank" }, { "error": "not_a_number" }, { "error": "not_exist" }, { "error": "invalid" }, { "error": "taken" }, { "error": "too_short", "count": 10 }, { "error": "too_long", "count": 15 } ], "gender": [ { "error": "inclusion" } ], "birthdate": [ { "error": "blank" },{ "error": "in_the_future" } ], "avatar": [ { "error": "blank" }, { "error": "invalid_content_type" } ], "email": [{ "error": "taken" }, { "error": "invalid" } ] } }

【问题讨论】:

  • @SaifulAzad extra_kwargs 对我不起作用。验证错误消息仍然是默认值。
  • @SalahHegazi 向我们展示您对extra_kwargs 的尝试,它应该可以工作。

标签: django django-rest-framework django-serializer


【解决方案1】:

您有两种声明自定义错误消息的方法,一种是在您的Model in models.py 中定义一个名为error_messages 的字典,另一种是在您的Serializer in serializers.py 中定义它

您必须为每个需要自定义错误消息的字段添加此字典。它是使用 django 抛出的错误代码作为字典中的键和消息作为值来定义的。根据文档:

错误消息键包括 null、blank、invalid、invalid_choice、 唯一的,并且唯一的_for_date。

您可以将此作为参考,用于您的模型字段:

first_name = models.CharField(_("First name of User"), max_length=50, error_messages = {"blank": "Invalid name entered"})

如果你想在序列化器中处理这个:

first_name = serializers.CharField(error_messages = {"blank": "Invalid name entered"})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2016-10-21
    • 2021-12-09
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多