Проверить, следует ли пользователь за автором сообщения 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,)