Javascript AngularJS Django Rest框架-尝试复制在400服务器上引发的JS对象错误

Javascript AngularJS Django Rest框架-尝试复制在400服务器上引发的JS对象错误,javascript,angularjs,django,django-rest-framework,jsonobject,Javascript,Angularjs,Django,Django Rest Framework,Jsonobject,这是我在尝试注册用户时调用的Django Rest框架代码/视图: def post(self, request): serializer = UserSerializer(data=request.DATA) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return

这是我在尝试注册用户时调用的Django Rest框架代码/视图:

def post(self, request):
    serializer = UserSerializer(data=request.DATA)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是我的AngularJS代码,它注册一个用户/调用上面发布的Django视图:

self.add = function() {
    $http.post("/CMS/users", self.user) // this URL calls the Django view posted above
    .error(function(data, status, headers, config) {
        console.log(data);
        for (prop in data) {
            console.log(data[prop]);
        };
    })
    .then(fetchUsers); // gets a list of existing users
    console.log("User clicked submit with ", self.user);
};
当我尝试注册一个已经存在的用户时,会记录以下内容:

Object {username: Array[1]}
    username: Array[1]
        0: "This username is already taken. Please, try again"
        length: 1
        __proto__: Array[0]
            concat: concat() { [native code] }constructor: Array() { [native code] }entries: entries() { [native code] }every: every() { [native code] }filter: filter() { [native code] }forEach: forEach() { [native code] }indexOf: indexOf() { [native code] }join: join() { [native code] }keys: keys() { [native code] }lastIndexOf: lastIndexOf() { [native code] }length: 0map: map() { [native code] }pop: pop() { [native code] }push: push() { [native code] }reduce: reduce() { [native code] }reduceRight: reduceRight() { [native code] }reverse: reverse() { [native code] }shift: shift() { [native code] }slice: slice() { [native code] }some: some() { [native code] }sort: sort() { [native code] }splice: splice() { [native code] }toLocaleString: toLocaleString() { [native code] }toString: toString() { [native code] }unshift: unshift() { [native code] }Symbol(Symbol.iterator): ArrayValues() { [native code] }Symbol(Symbol.unscopables): Object __proto__: Object
    __proto__: Object

["This username is already taken. Please, try again"] // this is data[prop]
User clicked submit with  Object {username: "a", password: "apass", email: "a@hotmail.com"}
我试图复制该对象,因为在我的整个应用程序中,当我为表单引发错误时,我希望保持一致性并以相同的方式引发错误(其中该对象具有字段名,然后是一个数组,其中包含一个字符串错误消息,可以使用data[prop]访问该消息)

这就是我在JSFIDLE上尝试的:

问题是,上面的代码将此记录到控制台:

Object {username: Object}
    username: Object
        0: "This username is already taken. Please, try again"
        __proto__: Object
    __proto__: Object

Object {0: "This username is already taken. Please, try again"} // this is data[prop]
请注意,尽管我试图以相同的形式重新创建对象,但data[prop]是不同的。我注意到的另一个区别是,在我的应用程序中,数组中的数组长度会被记录下来,如下所示:

length: 1
但是在我的JSFIDLE代码中,长度没有记录。我注意到的最后一个区别是,在我的JSfiddle代码中,数组中的数组称为对象,而在我的应用程序中,数组中的数组称为数组[1]。知道为什么吗?以及如何重新创建对象/数组,以便data[prop]返回字符串而不是返回

Object {0: "This username is already taken. Please, try again"}

Python Django序列化程序。默认情况下,错误将返回对象内部的数组形式。这意味着在你的情况下,它应该返回如下

 var data = {username: ["This username is already taken. Please, try again"]}

若要选中,请打开开发工具并查看响应选项卡。

因为serializer.errors默认情况下返回对象内部的数组形式。这意味着它返回
{username:[“此用户名已被占用。请在您的情况下重试”]}
。若你们想检查,那个么打开开发工具并查看响应tab@HiteshSiddhapura太棒了,谢谢。我将数据变量更改为“{username:[”此用户名已被使用。请重试“]}”,它现在返回与我尝试复制的对象相同的对象。这是一个新的JSFIDLE供感兴趣的人使用:您可以把它作为答案,我会将它标记为已解决。谢谢。很高兴它对你有用。@user2719875谢谢你接受它。还喜欢它哈哈:)
 var data = {username: ["This username is already taken. Please, try again"]}