使用many = true时访问perform_create中的对象

时间:2018-11-16 11:03:28

标签: django django-rest-framework

使用perform_create()时如何在kwargs['many'] = True中获得对象?

我收到此错误消息:

  

许多= 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()

1 个答案:

答案 0 :(得分:0)

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

因此,基本上,您需要重写序列化器:从ListSerializer继承它(因为您期望输入许多对象)并实现update方法。