【问题标题】:Overwrite django restframework CreateModelMixin serializer error message覆盖 django restframework CreateModelMixin 序列化程序错误消息
【发布时间】:2017-04-09 12:54:04
【问题描述】:

我正在使用 Django Restframework 3.3.3,并且我正在尝试使用通用视图,但我希望覆盖序列化程序验证错误消息。我得到以下代码,当没有给出名称字段时,它会出现“名称字段不能为空”。

class PositionList(generics.ListCreateAPIView):
    """Get the Position list, or add another Position only when you are admin"""
    renderer_classes = ((BrowsableAPIRenderer, JSONRenderer))        
    permission_classes = (IsAuthenticatedOrReadOnly, IsAdminOrReadOnly,)
    queryset = Position.objects.filter()
    serializer_class = PositionSerializer

我的问题是:有没有办法自定义错误消息。 以下方法对我不起作用: (1)。覆盖序列化器类中的init方法:

 def __init__(self, *args, **kwargs):
    super(UserSerializer, self).__init__(*args, **kwargs)
    self.fields['name'].error_messages['required'] = 'My custom required msg'

(2)。在序列化器类中给出错误信息:

class PositionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Position
        fields = ('id', 'name', 'description')
        extra_kwargs = {"name": {"required": _("Customized message goes here")}}

欢迎任何建议,提前谢谢

【问题讨论】:

标签: python django serialization error-handling django-rest-framework


【解决方案1】:

你几乎用序列化器做对了,你只是忘了把它放在error_messages

from django.utils.translation import ugettext_lazy as _

class PositionSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('id', 'name', 'description')
        extra_kwargs = {"name": {"error_messages": {"blank": _("Customized message goes here")}}}

您也可以尝试在模型中设置此消息。使用blank

class MyModel(models.Model):
    name = models.CharField(..., error_messages={'blank': _("Customized message goes here")})

【讨论】:

  • 我在使用代码时收到name '_' is not defined 错误。当我乘坐 _ 时,自定义的错误消息仍然没有出现。
  • @shady 是否给出任何错误,您得到什么响应?
  • 它似乎无法识别错误消息之前的下划线。当我删除下划线时,看起来一切正常,但仍然有一个`“名称”:[“此字段可能不是空白。” ]` 错误信息。 @Sardorbek Imomaliev
  • @shady 尝试我的第二个建议并更改模型中的此字段
  • @Sardorbek Imomaliev 这不起作用,我都试过了。
【解决方案2】:

您可以按照示例 1 进行操作,但不要使用“必需”,而是使用关键字“空白”:

def __init__(self, *args, **kwargs):
    super(PositionSerializer, self).__init__(*args, **kwargs)
    self.fields['name'].error_messages['blank'] = 'My custom required msg'

【讨论】:

  • 不走运,它不工作。我正在使用generic.ListCreateAPIView
  • 在序列化器 init 方法中确保,当你调用 super 时,你调用你的类...例如,如果你的序列化器是 PositionSerializer,调用它为:super (PositionSerializer,self),.....我将在我的答案中编辑示例以匹配序列化程序名称
猜你喜欢
  • 1970-01-01
  • 2021-01-05
  • 2021-05-09
  • 1970-01-01
  • 2011-04-28
  • 2012-10-18
  • 2015-01-12
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多