如何覆盖批量添加Django Rest框架的POST方法

2024-09-28 22:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在my url.py中:

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

books.py:

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

serializer.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')

Tags: todjango方法py框架restapiid
1条回答
网友
1楼 · 发布于 2024-09-28 22:25:57

序列化器创建方法,不幸的是逐对象创建数据对象。您可以重写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)

相关问题 更多 >