Django user Follow Unfollow Query

Я создаю приложение для записи в блоге, и одним из моих требований является то, что пользователи могут следить и не следить друг за другом. Я создал profile model class для каждого пользователя и в нем я добавил колонку following к user model, используя поле многие ко многим.

Модель профиля человека ->

class People(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    following = models.ManyToManyField(to=User, related_name='following', blank=True)
    photo = models.ImageField(upload_to='profile_pics', blank=True,null=True)
    Phone_number = models.CharField(max_length=255,null=True,blank=True)
    Birth_Date = models.DateField(null=True,blank=True)
    Created_date = models.DateTimeField(auto_now_add=True)
    Updated_date = models.DateTimeField(auto_now=True)

Сейчас я размещаю все посты на веб-странице, и для каждого поста в шаблоне также указывается автор. Требование заключается в том, что мне нужно дать кнопку, чтобы следовать или не следовать за автором поста. Теперь в первый раз, когда пользователь заходит на страницу, если за автором поста уже следят, мне нужно показать кнопку разблокировки, и для этого мне нужно проверить следование за автором каждого поста и внести изменения в шаблон в соответствии с ответом из DB.

Вот запрос, который я написал ->

posts =  Post.objects.exclude(users=request.user)\
    .select_related('user__people','ProductAvailability').prefetch_related('images_set','Likes')\
    .annotate(comments_Count = Count('comments_post',distinct=True)).annotate(
        Count('Likes',distinct=True),is_liked=Exists(
        Post.Likes.through.objects.filter(
            post_id=OuterRef('pk'), user_id=user_id
        )
    ),isSaved=Exists(
        Post.favourites.through.objects.filter(
            post_id=OuterRef('pk'), user_id=user_id
        )),
        isFollowed=Exists(
            People.following.through.objects.filter(
                people_id=OuterRef('pk'), user_id=user_id
            )
        )
    ).all().order_by('-id')

Теперь в БД отображается запись user_id = 1 с people_id = 3, т.е. пользователь 1 следует за людьми с id 3. но вышеприведенный запрос возвращает 0 в качестве вывода в isFollowed.

Может ли кто-нибудь указать на ошибку, которую я допускаю.

Вы можете проверить, существует ли People объект с таким же user_id названием user_id и где мы находимся following User, который написал это сообщение:

posts = Post.objects.exclude(users=request.user).select_related(
    'user__people','ProductAvailability'
).prefetch_related('images_set','Likes').annotate(
    isFollowed=Exists(
        People.objects.filter(
            following__post__id=OuterRef('pk'), user_id=user_id
        )
    )
).order_by('-id')

enter image description here

Вот БД, которую я имею в настоящее время. здесь у меня есть таблица people, таблица people_following, таблица post и таблица user.

и это схема для таблицы poeple_following.

enter image description here

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