2016-05-23 37 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