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')
Вот БД, которую я имею в настоящее время. здесь у меня есть таблица people, таблица people_following, таблица post и таблица user.
и это схема для таблицы poeple_following.

