Доступ к объекту в execute_create при использовании many = true - PullRequest
0 голосов
/ 16 ноября 2018

Как получить объект в 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 голосов
/ 16 ноября 2018

Проблема в сериализаторе.По сути, ваш сериализатор знает, как создать один объект, но вы просите его создать много.В DRF3 создание этого множества объектов должно быть реализовано вручную.

Так что в основном вам нужно переписать ваш сериализатор: унаследовать его от ListSerializer (потому что вы ожидаете ввода многих объектов) и реализовать метод update.

...