将对象或对象数组发布到API

时间:2014-11-09 17:15:18

标签: python arrays django rest django-rest-framework

我想有一个REST API端点,我可以在其中发布json对象或json对象数组。

我设法通过重新定义ModelViewSet的create方法来实现:

def create(self, request, *args, **kwargs):

        serializer = self.get_serializer(data=request.DATA, many=False)
        if serializer.is_valid():
            serializer.save()
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
        else:
            serializer = self.get_serializer(data=request.DATA, many=True)
            if serializer.is_valid():
                serializer.save()
                headers = self.get_success_headers(serializer.data)
                return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我使用序列化程序中的is_valid()来了解数据是否包含对象或数组(很多都设置为True或False),但由于这个原因,我失去了序列化程序验证用于其他目的,如字段验证。

有没有更好的方法来实现这种行为?

我是否应该使用另一个url创建另一个函数来发布一个对象数组?什么是支持这两种操作的REST方式?

1 个答案:

答案 0 :(得分:2)

Django REST Framework默认情况下不支持批量对象创建,但有些软件包可以添加对它的支持,例如Django REST Framework Bulk

可以稍加修改work with routers。这应该可以让你做你想要的。

  

因为我失去了序列化验证用于其他目的,如字段验证。

这是因为您没有传递序列化程序上下文,这些通用视图会自动执行。