Проверьте, понравилось ли кому-то сообщение или нет, в шаблоне 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 %}