AttributeError: объект 'WSGIRequest' не имеет атрибута 'get' heroku
У меня есть запрос get, но он не работает на heroku с этой ошибкой :
AttributeError: 'WSGIRequest' object has no attribute 'get'
Мне не удалось найти первопричину этого Ниже приводится мое мнение:
class PostDetail(generics.GenericAPIView):
"""Blog post details"""
queryset = Post.objects.all()
serializer_class = serializers.PostSerializer
authentication_classes = (JWTAuthentication,)
permission_classes = (PostsProtectOrReadOnly, IsMentorOnly,)
lookup_field = 'slug'
def get_post_object(self, slug):
post = get_blog_by_slug(slug)
return post
def get(self, request, slug):
post = self.get_post_object(slug)
if not post:
return response.Response({
'errors': _('Sorry, Blog post with the specified slug does'
'not exist')
}, status=status.HTTP_404_NOT_FOUND)
# track views of a viewed blog post.
ip_address = get_ip_address(request)
obj = CustomIPAddress.objects.create(address=ip_address)
post.address_views.add(obj)
serializer = self.serializer_class(post, context=request)
return response.Response(serializer.data, status=status.HTTP_200_OK)
Методы, которые я вызываю выше :
def get_blog_by_slug(slug: str):
"""Get post by slug."""
try:
obj = Post.objects.get(slug=slug)
return obj
except Post.DoesNotExist:
return None
def get_ip_address(request):
"""get ip address."""
try:
client_ip, is_routable = get_client_ip(request)
if client_ip is None:
return uuid.uuid4()
else:
return client_ip
except AttributeError:
return uuid.uuid4()
except:
return uuid.uuid4()
Интересно, почему на локальном сервере он работает, а на сервере heroku я получаю эту ошибку.
Полные журналы из heroku :
Вы не можете посылать request
непосредственно как context=…
в сериализатор. Контекст должен быть словареподобным объектом.
Что вы можете сделать, так это построить словарь, в котором вы сопоставите request
с запросом, например:
serializer = self.serializer_class(post, context={'request': request })
Тогда вы можете использовать это как:
class PostSerializer(serializers.ModelSerializer):
# ⋮
def create(self, validated_data):
"""Create a blog post in a customized way."""
tags = validated_data.pop('tags', [])
post = Post.objects.create(**validated_data, owner=self.context['request'].user)
# ⋮