Как я могу получить пользователя при валидации в сериализаторе? - PullRequest
0 голосов
/ 07 декабря 2018

С моей точки зрения (CreateView) я переопределяю свой метод def create, но в моей проверке я не могу получить зарегистрированного пользователя по self.context.get('request').user, так как я могу зарегистрировать пользователя в моей проверке?

ОБНОВЛЕНИЕ:

Ошибка:

line 293, in validate user = self.context.get('request').user AttributeError: 'NoneType' object has no attribute 'user'

ОБНОВЛЕНИЕ 2

class OrderAPIPost(CreateAPIView):
    permission_classes = (permissions.IsAuthenticated, )
    serializer_class = MultipleOrderSerializer
    queryset = Order.objects

    def create(self, request, *args, **kwargs):
       write_serializer = MultipleOrderSerializer(data=request.data)
       write_serializer.is_valid(raise_exception=True)
       orders = write_serializer.data.get('items')
       orders = list(map(lambda order: Order.create_order(order, self.request.user), orders))
       read_serializer = list(map(lambda order: OrderSerializerList(order), orders))
       read_serializer = list(map(lambda order: order.data, read_serializer))
       return Response(read_serializer, status=status.HTTP_201_CREATED)

1 Ответ

0 голосов
/ 07 декабря 2018

Итак, из того, что я вижу в вашем коде, вы создаете сериализатор вручную без добавления контекста.В большинстве случаев достаточно позволить CreateView создать сериализатор сам по себе, но если вам действительно нужно создать его самостоятельно, вам нужно не забывать передавать контекст.Что-то вроде этого:

    context = {'request': self.request}
    write_serializer = MultipleOrderSerializer(data=request.data, context=context)

Вы можете проверить метод представления get_serializer(), чтобы увидеть, как правильно создан сериализатор.Я действительно советую вам реорганизовать свой код и попытаться использовать существующее решение для создания сериализаторов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...