2016-05-23 56 views
0

這個非常簡單的django restframework代碼。Django將默認錯誤消息放入一個字段

models.py

class User(models.Model) 
    Email = models.CharField(max_length=100) 
    Username = models.CharField(max_length=100) 
    State = models.CharField(max_length=100) 

serializers.py

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('Email','Username','State') 

views.py

class UserList(generics.ListCreateAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

如果使用此我得到的錯誤了把這樣

{ 
    "Email": [ 
     "This field may not be blank." 
    ], 
    "Username": [ 
     "This field may not be blank." 
    ], 
    "Country": [ 
     "This field may not be blank." 
    ], 
} 

但我需要改變這樣的錯誤。我可以如何存檔這個和任何建議非常感謝。

{"error": 
    [ 
    "Email is required", 
    "Username is required", 
    "County is required" 
    ] 

} 
+1

這背後的目的是什麼? – AKS

+0

我向我的前端開發人員提供我的API,他請求並使用angularjs。 – msr

+0

可能值得向前端開發人員解釋爲什麼它們實際上是分開的,它們與實際字段相關,因爲它們是 – Sayse

回答

0

您可以定義自己的出錯信息的任何錯誤的情況下:

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('Email','Username','State') 

    def __init__(self, *args, **kwargs): 
     super(UserSerializer, self).__init__(*args, **kwargs) 
     for field in self.Meta.fields: 
      self.fields[field].error_messages['required'] = "%s is required" % field 
+0

如果我使用媒體類型:application/json,它給了我默認的錯誤,但如果我使用媒體類型:application/x-www-form-urlencoded,那麼它會給我定製的錯誤消息。 – msr

0

你總是可以覆蓋從通用視圖的創建/更新的方法。它會是這樣的:

class UserList(generics.ListCreateAPIView): 

    queryset = User.objects.all() 
    serializer_class = UserSerializer 

    def create(self, request, *args, **kwargs): 
     serializer = self.get_serializer(data=request.data) 
     if not serializer.is_valid(raise_exception=False): 
      # TODO: add here your custom error dict using serializer.errors 
      return Response({"error":...}, status=...) 
     self.perform_create(serializer) 
     headers = self.get_success_headers(serializer.data) 
     return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) 

或者......你可以嘗試覆蓋序列化器......如果你不想覆蓋視圖。

(但是,必須有不能夠解析簡單的JSON錯誤對象JS開發​​一個很好的理由:P)

希望這有助於

+0

感謝您的幫助 – msr