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.