0

我使用Django Restframework 3.3.3,和我試圖使用通用的意見,但我希望能改寫串行驗證錯誤消息。我得到了下面的代碼,當name字段沒有給出時,得到了「名稱字段不能爲空」。覆蓋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框架序列化的自定義錯誤消息](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

在序列化程序__init__方法中,確保當你調用super時,你調用你的類...例如,如果你的序列化程序是PositionSerializer,調用它爲:super(PositionSerializer,self),.....我會在我的答案中編輯示例以匹配序列化程序名稱 –