Найти данные внутри вложенного ORM в Django - PullRequest
0 голосов
/ 15 февраля 2020
class Post(models.Model):
    POST_TYPE =(
        ("video","video"),
        ("pic","pic"),
    )
    upload_by = models.ForeignKey(User,on_delete=models.CASCADE)
    caption = models.TextField()
    post_type = models.CharField(max_length=100,choices=POST_TYPE)
    media = models.FileField(upload_to='posts/')
    created_at = models.DateTimeField(auto_now_add=True)


class PostLikes(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    like_by = models.ForeignKey(User,on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

Это мой models.py файл, и я хочу узнать, нравится ли текущему пользователю логина сообщение в моих шаблонах или нет. Я делаю это в моем файле шаблонов

{% if request.user in i.postlikes_set.all%}

, но я знаю, что это неправильно, кто-нибудь может решить эту проблему? Я хочу сделать это в моих шаблонах

<a class="post-like-btn" href="#" {% if request.user in i.postlikes_set.all%} style="color: #e16a70;" {% else %} style="color:#b2b2b2 !important;" {% endif %}>

1 Ответ

0 голосов
/ 15 февраля 2020

ИМХО проверка того, нравится ли пользователю Post или нет, это то, что нужно сделать в представлении.

Глядя на ваше сообщение, я думаю, что вы отображаете список Posts в своем шаблоне, где каждый элемент либо понравился, либо не понравился пользователю. Что вы можете сделать, так это аннотировать каждое сообщение с этой информацией в представлении, а затем использовать эту информацию в своем шаблоне. Например,

#views.py

from django.db.models import OuterRef, Exists

def list_posts(request):
    user = request.user

    my_likes = PostLikes.objects.filter(
        post = OuterRef('pk'),
        like_by = user
    )

    posts = Post.objects.annotate(like_by_user=Exists(my_likes))

    context = {'posts': posts}

    return render(request, 'yourtemplate.html', context)

И тогда в вашем шаблоне вы можете сделать

<a class="post-like-btn" href="#" {% if i.like_by_user %} style="color: #e16a70;" {% else %} style="color:#b2b2b2 !important;" {% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...