我想有一个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方式?
答案 0 :(得分:2)
Django REST Framework默认情况下不支持批量对象创建,但有些软件包可以添加对它的支持,例如Django REST Framework Bulk。
可以稍加修改work with routers。这应该可以让你做你想要的。
因为我失去了序列化验证用于其他目的,如字段验证。
这是因为您没有传递序列化程序上下文,这些通用视图会自动执行。