首页 > 解决方案 > 使用 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()

标签: djangodjango-rest-framework

解决方案


问题出在序列化程序中。基本上,您的序列化程序知道如何创建一个对象,但您要求他创建多个对象。在 DRF3 中,许多对象的创建应该手动实现。

所以基本上你需要重写你的序列化器:继承它ListSerializer(因为你期望输入很多对象)并实现update方法。


推荐阅读