覆盖django restframework CreateModelMixin序列化程序错误消息

时间:2016-11-25 07:20:38

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

我正在使用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")}}

欢迎任何建议,提前谢谢

2 个答案:

答案 0 :(得分: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")})

答案 1 :(得分:0)

你可以像你的例子1那样,但不是“必需”使用关键字“空白”:

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