python - 如何覆盖批量添加的 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')
解决方案
序列化器创建方法,不幸的是按对象创建数据对象。您可以覆盖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)
推荐阅读
- spring-cloud-stream - 当自动提交为真时,Spring Cloud Stream Kafka Binder Health Indicator 失败
- selenium - selenium.common.exceptions.WebDriverException:消息:未知错误:net::ERR_CONNECTION_RESET(会话信息:headless chrome=86.0.4240.111)
- ios - 如果你想在 iOS 应用的导航栏中放置 3 个图标,你会怎么做?
- python - 将带有元组列表的 Pandas 列拆分为单独的列
- javascript - 矩形碰撞
- android - FragmentTransaction setCustomAnimations() 仅对下一个片段而不是当前片段进行动画处理
- java - 在绑定自定义视图事件中我能做什么?请告诉
- sql - 创建函数时出错--无效使用副作用运算符
- bash - 子字符串检测无法检测到换行符
- reactjs - 如何防止在 React with Hooks & Context 中对子组件进行不必要的重新渲染?