У объекта 'Request' нет атрибута 'get': Django Views &. Serializers

Я работаю над приложением Dajngo DRF, которое служит в качестве API для моего приложения.

Мне очень трудно отладить эту ошибку: У объекта запроса нет атрибута 'get'.

Ошибка появляется после того, как я обновляю свою организацию. Ошибка перехватывается как исключение, поэтому я уверен, что она происходит из метода patch моего представления OrganisationDetail. Вот представление ниже:

class OrganisationDetail(generics.RetrieveUpdateDestroyAPIView):
    """
    Retrieve, update or delete an organisation.
    """
    permission_classes = (IsAuthenticated, IsInOrg)
    queryset = Organisation.objects.all()
    serializer_class = OrganisationSerializer
    logger.info("Init log from organisation view")

    def get_object(self, pk):
        try:
            return Organisation.objects.get(pk=pk)
        except Organisation.DoesNotExist:
            return HttpResponse(status=404)

    def get(self, request, pk, format=None):
        organisation = self.get_object(pk)
        serializer = OrganisationSerializer(organisation)
        return Response(serializer.data)

    def patch(self, request, pk, format=None):
        try:
            organisation = self.get_object(pk)
            data = copy.deepcopy(request.data)
            member_to_remove = request.data.get(
                'user_to_remove', 'no_user_to_remove')
            if member_to_remove != 'no_user_to_remove':
                data['member_to_remove'] = member_to_remove
            if "name" not in data:
                data["name"] = organisation.name
            if "description" not in data:
                data["description"] = organisation.description

            serializer = OrganisationSerializer(
                organisation, data=data, context=request, partial=True)

            if serializer.is_valid():
                serializer.save()
                logger.info(f"PATCH SUCCESSFUL: {serializer.data}")
                return Response(serializer.data)
            logger.warning(f"PATCH Failed: {serializer.errors}")
            return JsonResponse(serializer.errors, status=400)
        except Exception as e:
            logger.error(f"PATCH Failed with exception: {e}")
            return JsonResponse({'error': str(e)}, status=500)

Я также собираюсь включить свой сериализатор в надежде, что это поможет:

Ошибка возникает после того, как я добавляю пользователя в организацию (метод patch в представлении, update в сериализаторе). Пользователь создается при обновлении организации.

В этой ошибке есть две очень странные вещи:

  1. Ошибка никогда не появляется на моем localhost, а возникает только при развертывании в staging на GCP.
  2. Пользователь по-прежнему создается, но запрос патча возвращается с ответом 500.

К сожалению, я не смог добиться того, чтобы протоколирование велось в GCP с помощью stackdriver, это вопрос для другого сообщения. Единственный признак ошибки, который я могу найти, это тот, который регистрируется api клиентом в front end, который гласит: У объекта 'Request' нет атрибута 'get'

Я в растерянности, и любая помощь будет оценена по достоинству. спасибо

Я пытался удалить все .get в методе patch представления, и использовать некоторые (довольно уродливые) try excepts для обработки ненайденных значений в dict. Даже после удаления всех методов dict.get() я все равно получаю ту же ошибку.

Ответ оказался довольно простым. При инициализации сериализатора переменной необходимо правильно передать объект запроса, как показано ниже. Объект запроса должен иметь явный ключ, а значение данных должно поступать непосредственно из запроса:

serializer = OrganisationSerializer(
                organisation, data=request.data, context={'request': request}, partial=True)
Вернуться на верх