Проверьте, понравилось ли кому-то сообщение или нет, в шаблоне django

У меня есть эта модель:

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    text = models.CharField(max_length=1200, blank=True)

class PostLike(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

Шаблон

for post in posts
...
# want to check here, something like:
if post.userliked write something endif
...
endfor

Теперь я хочу проверить, понравился ли пост текущему зарегистрированному пользователю или нет в шаблоне django.

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

Помогите, пожалуйста!

Вы можете иметь likes в отношениях "многие ко многим" при доступе к этому полю и user (как владелец поста) поле с FK связанным именем :

models.py

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
    text = models.TextField()
    likes = models.ManyToManyField(User, related_name='likes')

Таким образом, мы можем получить доступ к Post, созданным User с помощью user.posts.all() и ко всем постам, понравившимся User с помощью user.likes.all()

views.py

def posts(request):
    posts = Post.objects.all()
    return render(request, 'posts.html', {'posts': posts})

Поскольку вы хотите проверить вошедшего пользователя, нам не нужно передавать его по контексту, вместо этого мы обращаемся к нему непосредственно в шаблоне, используя объект request.

posts.html

{% extends 'base.html' %}

{% block content %}
    {% for post in posts %}
    <p>{{post}}</p>
        {% if post in request.user.likes.all %}
            <p> You already liked this post </p>
        {% else %}
            <button>Like</button>
        {% endif %}
        <hr>
    {% endfor %}
{% endblock content %}
Вернуться на верх