首页 > 解决方案 > 如何覆盖批量添加的 POST 方法 - Django Rest Framework

问题描述

我正在使用 Django Rest Framework 编写一个 REST API,我希望我的一条路由接受批量添加 POST 方法,以创建多个对象。其他方法(GET、PUT、PATCH、DELETE)仍然保持不变,一次只接受一个。

到目前为止,我所拥有的内容如下,目前可以一次发布一个。

在我的 urls.py 中:

path('book', books.BookViewSet.as_view()),

书籍.py:

class BookViewSet(viewsets.ModelViewSet):
    serializer_class = BookSerializer
    queryset = Book.objects.all()
    permission_classes = (IsAuthenticated, )

序列化程序.py:

class BookSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        # I assume this is the method to be overridden to get this

    class Meta:
        model = Book
        fields = ('id', 'name', 'author_id', 'page_number', 'active')

标签: pythondjangoapidjango-rest-frameworkdjango-rest-viewsets

解决方案


序列化器创建方法,不幸的是按对象创建数据对象。您可以覆盖ModelViewSet验证使用bulk_create方法的创建方法和之后。

def create(self, request, *args, **kwargs):
    many = True if isinstance(request.data, list) else False
    serializer = BookSerializer(data=request.data, many=many)
    serializer.is_valid(raise_exception=True)
    author = request.user # you can change here
    book_list = [Book(**data, author=author) for data in serializer.validated_data]
    Book.objects.bulk_create(book_list)
    return Response({}, status=status.HTTP_201_CREATED)

推荐阅读