Django rest框架忽略模型上设置的错误消息
我正在使用DRF3.2.3,遇到了这个问题。我有一个用于创建用户的序列化程序(web应用程序使用自定义用户模型): 问题是,在模型中指定的错误消息被完全忽略。例如,电子邮件字段在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.
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.",
)]
)