У объекта '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 в сериализаторе). Пользователь создается при обновлении организации.
В этой ошибке есть две очень странные вещи:
- Ошибка никогда не появляется на моем localhost, а возникает только при развертывании в staging на GCP.
- Пользователь по-прежнему создается, но запрос патча возвращается с ответом 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)