Проверить, следует ли пользователь за автором сообщения django

Я создаю сайт блогов, где пользователь может поставить лайк, добавить пост в закладки и следить за пользователем/автором поста. Я хочу, чтобы при запросе блога по slug url. он также проверял, понравился ли пользователю этот пост и добавил ли он этот пост в закладки, а также проверял, следует ли пользователь за автором или нет.

пожалуйста, подскажите, как мне применить следующую логику

Модель пользователя

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True, null=False, blank=False)
    username = models.CharField(max_length=150, unique=True, null=True, blank= True)
    ....
    ....
    likes = models.ManyToManyField(Blog, blank=True, related_name="users_likes")
    bookmarks = models.ManyToManyField(Blog, blank=True, related_name="users_bookmarks")
    followers = models.ManyToManyField("self",blank=True, symmetrical=True , related_name='user_follower')

Модель блога

class Blog(models.Model):
    title = models.CharField(max_length=200, unique=False)
    slug = models.SlugField(max_length=300, unique=True, null=True, blank=True)
    author = models.ForeignKey("accounts.CustomUser", on_delete=models.CASCADE)
    ....
    ....
    def get(self, request):
        print("slugggggggggggggg", request.query_params['slug'])
        if "slug" not in request.query_params.keys():
            return Response({"error": "slug required"}, status=status.HTTP_400_BAD_REQUEST)
        try:
            query = Blog.objects.annotate(
                #also not working
                liked=Case(
                    When(users_likes=request.user.id, then=Value(True)),
                    default=Value(False),
                ),
                #also not working
                bookmarked=Case(
                    When(users_bookmarks=request.user.id, then=Value(True)),
                    default=Value(False),
                ),
                # following is not working
                # following=Case(
                #     When(author__user_follower=request.user.id, then=Value(True)),
                #     default=Value(False),
                # ),

                total_likes=Count('users_likes'),
                about=F('author__about'), 
                followers_number=Count('author__followers'),
            ).get(status=True, slug=request.query_params['slug'])
            serializer = BlogUserSerializer(query)
            return Response(serializer.data,)
Вернуться на верх