我正在使用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")}}
欢迎任何建议,提前谢谢
答案 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'