Одна кнопка "нравится" нравится каждому сообщению с помощью _set lookup

Я создаю простое/легкое групповое приложение, в котором пользователи могут вступать в группу, создавать и любить посты, поэтому я сделал три models :- Group, BlogPost, 'Like' (для того, чтобы любить посты в блоге).

После вступления в группу я добавляю Like model в blogposts.like_set.all, чтобы пользователи могли лайкнуть сообщения, если они им не понравились.

Итак, я создал like button для каждого поста в блоге, но когда request.user ставит лайк посту, тогда каждый пост становится лайковым.

models.py

class Group(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=300)

class BlogPost(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.CharField(max_length=300)
    group_of = models.ForeignKey(Group, on_delete=models.CASCADE)

class LikeBlogPost(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    blog_of = models.ForeignKey(User, on_delete=models.CASCADE)

views.py

def group_detail_view(request, group_id):
    obj = get_object_or_404(Group, pk=group_id)

    blog_posts = obj.blogpost_set.all()

    likePost = LikeBlogPost.objects.filter(blog_of__in=blog_posts,
                        user=request.user).first()

    context = {'obj':obj,'blog_posts':blog_posts,'likePost':likePost}
    return render(request, 'group_detail_view.html', context}

group_detail_view.html


{% for allPosts in blog_posts %}


{{ allPosts.body }}

    {% if request.user == likePost.user %}
    <button name='submit' type='submit'>UnLike</button> 
    {% else %}
    <button name='submit' type='submit'>Like</button> 
    {% endif %}



{% endfor %}

Что я пытаюсь сделать? :-

Я пытаюсь поставить лайк только одному сообщению за раз, но теперь если мне нравится одно сообщение, то все сообщения становятся лайками.

Что я пробовал? :-

  • Сначала я попробовал использовать метод _set.all в template, например :-
{% for lik in allPosts.likeblogpost_set.all %}

    {% if request.user == lik.user %}

    Liked

    {% else %}

    Not Liked

    {% endif %}

{% endfor %}

Когда я пробую это, если мне нравится пост, то он показывает Liked как if statement, но если мне не нравится, то он Не показывает Not Liked как else statement.

  • Попробовал new query в view как :-
    lk = blog_posts.filter(likeblogposts__blog_of__in=blog_posts)

и в шаблоне он также не показывает else statement как выше

Я пробовал много раз, но ничего не помогло.

Любая помощь будет очень признательна. Спасибо

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