0

Я использую Django Restframework 3.3.3, и я пытаюсь использовать общие представления, но я надеялся перезаписать сообщение об ошибке проверки серийности. Я получил следующий код, который получил «поле имени не может быть пустым», когда поле имени не указано.Перезаписать django restframework Сообщение об ошибке сериализации CreateModelMixin

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

Почему это 'MyModel' вместо' Position' в вашем сериализатором ? –

+0

Нет, эта проблема уже редактировалась. Все еще не могу понять, почему сообщение об ошибке нельзя настроить. – shady

+0

Возможный дубликат [Пользовательские сообщения об ошибках в Django Rest Framework serializer] (http://stackoverflow.com/questions/26943985/custom-error-messages-in-django-rest-framework-serializer) –

ответ

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")}) 
+0

У меня есть «имя», Ошибка «не определена» при использовании кода. Когда я получаю сообщение от _, настроенное сообщение об ошибке все еще не отображается. – shady

+0

@shady это дает какую-либо ошибку, какой ответ вы получаете? –

+0

Похоже, он не может распознать знак подчеркивания перед сообщением об ошибке. Когда я удаляю символ подчеркивания, он выглядит неплохо, но все же получил «имя»: [«Это поле может быть не пустым». ] 'сообщение об ошибке. @Sardorbek Imomaliev – shady

0

Вы можете пойти, как в вашем примере 1, но вместо «требуется» использование ключевого слова «пустой»:

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

Не повезло, он не работает. Я использую 'generic.ListCreateAPIView'. – shady

+0

В методе serializer __init__ убедитесь, что при вызове super вы вызываете свой класс ... Например, если ваш сериализатор - PositionSerializer, назовите его как: super (PositionSerializer, self), ..... я отредактируйте пример в моем ответе, чтобы совместить имя сериализатора –

Смежные вопросы