Django rest框架忽略模型上设置的错误消息

Django rest框架忽略模型上设置的错误消息,django,python-3.x,django-rest-framework,Django,Python 3.x,Django Rest Framework,我正在使用DRF3.2.3,遇到了这个问题。我有一个用于创建用户的序列化程序(web应用程序使用自定义用户模型): 问题是,在模型中指定的错误消息被完全忽略。例如,电子邮件字段在GRUser模型中定义如下: email = models.EmailField(_('email address'), unique=True, help_text=_('Email address that acts as the primary unique identifier for the user.

我正在使用DRF3.2.3,遇到了这个问题。我有一个用于创建用户的序列化程序(web应用程序使用自定义用户模型):

问题是,在模型中指定的错误消息被完全忽略。例如,电子邮件字段在
GRUser
模型中定义如下:

email = models.EmailField(_('email address'), unique=True,
    help_text=_('Email address that acts as the primary unique identifier for the user.'),
    error_messages={
        'unique': _("A user with that email already exists."),
    })
当使用可浏览的api时,DRF甚至可以从模型中获取并显示帮助文本,但是,当我输入一封已经使用过的电子邮件时,我得到的是DRF默认的
“此字段必须是唯一的。”
消息,而不是
“已存在该电子邮件的用户”


为什么会发生这种情况,有设计上的原因吗?我是否可以让DRF使用模型中的错误消息(除了违反DRY原则并在序列化程序中手动重复其文本的明显解决方案)?

您可能必须覆盖
唯一验证程序
,该程序已由
模型序列化程序
用于唯一字段。默认验证器目前不使用来自模型的消息。这就是你要做的:

class CreateGRUserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(validators=[
            UniqueValidator(
                queryset=GRUser.objects.all(),
                message="A user with that email already exists.",
            )]
        )

或者,您可以在序列化程序的
\uuu init\uuuuuuuuuu()方法中更新
'error\u messages'
字段['email']
属性的
'unique'
键。

此功能现已添加到DRF中。看

class CreateGRUserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(validators=[
            UniqueValidator(
                queryset=GRUser.objects.all(),
                message="A user with that email already exists.",
            )]
        )