Cannot Read Data from Nested Serializer in Django REST Framework

models.py

class Post(models.Model):
  content = models.TextField()
  created = models.DateTimeField(auto_now_add=True)
  suspended = models.BooleanField(default=False)
  user = models.ForeignKey(User, on_delete=models.CASCADE)

class Follow(models.Model):
  follower = models.ForeignKey(User, related_name='followings', on_delete=models.CASCADE)
  following = models.ForeignKey(User, related_name='followers', on_delete=models.CASCADE)
  created = models.DateTimeField(auto_now_add=True)
  
  class Meta:
    unique_together = ('follower', 'following')

serializer.py

class PostSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)

class UserSerializer(serializers.ModelSerializer):
    is_following = serializers.BooleanField(read_only=True)

views.py

class PostViewSet(ModelViewSet):
    serializer_class = PostSerializer
    permission_classes = [IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly]

    def get_queryset(self):
        queryset = Post.objects.filter(
            suspended=False
        ).select_related(
            'user'
        )
        if self.request.user.is_authenticated:
            queryset = queryset.annotate(
                user__is_following=Exists(
                    Follow.objects.filter(
                        follower=self.request.user,
                        following=OuterRef("user_id")
                    )
                )
            )
        else:
            queryset = queryset.annotate(
                user__is_following=Value(False)
            )
        return queryset

I can’t check is_following inside the user object.

In my post list, I’m using a nested serializer to get user information for each post, but I’m failing when trying to check is_following. I want to understand where I went wrong, as I’m new to DRF.

Вернуться на верх