django - 使用 many=true 时访问 perform_create 中的对象
问题描述
perform_create()
使用时如何获取对象kwargs['many'] = True
?
我收到此错误消息:
many=True 的序列化器默认不支持多次更新,只支持多次创建。对于更新,尚不清楚如何处理插入和删除。如果您需要支持多个更新,请使用一个
ListSerializer
类并覆盖.update()
,以便您可以准确地指定行为。
class CreateUserApiView(CreateAPIView):
model = User
...
serializer_class = CreateRequesterSerializer
def get_serializer(self, *args, **kwargs):
""" if an array is passed, set serializer to many """
if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True
return super(CreateUserApiView, self).get_serializer(*args, **kwargs)
def perform_create(self, serializer):
obj = serializer.save(
...,
created_by=self.request.user)
obj.send_invitation()
解决方案
问题出在序列化程序中。基本上,您的序列化程序知道如何创建一个对象,但您要求他创建多个对象。在 DRF3 中,许多对象的创建应该手动实现。
所以基本上你需要重写你的序列化器:继承它ListSerializer
(因为你期望输入很多对象)并实现update
方法。
推荐阅读
- mongodb - 如何在 Spring Boot Docker 中连接到 MongoDB Atlas?
- c - 仅当存在参数时才进行 C 宏字符串化
- azure - Azure DevOps - 将构建发布的工件部署到 Feed
- ruby-on-rails - 如何在 Ruby on Rails 中使用 select_tag 中的数据创建条件语句?
- python - 使用 Python 从 Jenkins 获取实时数据到 Elastic 搜索
- powershell - 如何从数组中获取多个文件夹中的所有文件
- ios - 在 Swift 中按给定日期获取一天的开始
- python - 为什么 Arcgis 将我的地址放在海里?
- javascript - 从外部应用程序打开时的 WebView cookie 生命周期
- spring-boot - Spring Security ROLE_ADMIN 和 ROLE_USER 问题