This is my ViewSet:
class PostViewSet(viewsets.ModelViewSet): serializer_class = PostSerializer permission_classes = (IsAuthenticated, IsOwnerDeleteOrReadOnly) def get_queryset(self): return Post.objects.filter(location=self.request.user.userextended.location) def perform_create(self, serializer): serializer.save(owner=self.request.user, location=self.request.user.userextended.location) def get_serializer_context(self): """ Extra context provided to the serializer class. """ return { 'format': self.format_kwarg, 'view': self, 'location': self.request.user.userextended.location } @detail_route(methods=['post'], permission_classes=[IsAuthenticated, IsFromLocation]) def like(self, request, pk=None): post = self.get_object() post.usersVoted.add(request.user) return Response(status=status.HTTP_204_NO_CONTENT) @detail_route(methods=['get'], permission_classes=[IsAuthenticated, ValidPostPkInKwargs, IsFromPostLocation]) def replies(self, request, pk=None): post = self.get_object() replies = post.postreply_set.all() serializer = PostReplySerializer(replies, many=True) return Response(serializer.data)
And this is my PostReplySerializer:
class PostReplySerializer(serializers.ModelSerializer): owner = serializers.SlugRelatedField(slug_field='username', read_only=True) voted = serializers.SerializerMethodField() def get_voted(self, obj): return self.context['request'].user in obj.usersVoted.all() class Meta: model = PostReply fields = ('id', 'owner', 'post', 'voted', 'location')
The error indicates a line
return self.context['request'].user in obj.usersVoted.all()
and says:
KeyError at /URL/20/replies/ 'request'
Any idea why DRF says βqueryβ is a key mistake, although (in my opinion) should it be automatically in self.context ?
Please note that PostViewSet works fine for all other requests (if I receive a message, I get a list of messages, etc.). This just doesn't work for replies .