Ваш for
l oop будет просто запускаться при создании класса, и, кроме того, вы просто будете определять функцию (несколько раз), а не выполнять функцию. Наконец, обратите внимание, что это должно изменить атрибут Post
, а не только общий объект.
Вы можете аннотировать ваш набор запросов с помощью:
from django.db.models import Exists, OuterRef
from app.models import Post, Like
class PostListView(ListView):
model = Post
template_name = 'main/problems.html'
context_object_name = 'posts'
ordering = ['-created']
def get_queryset(self, *args, **kwargs):
Post.objects.filter(
created__range=['2020-03-01', '2020-03-31']
).annotate(
is_liked=Exists(Like.objects.filter(
<b>user_id=self.request.user.pk, post_id=OuterRef('pk')</b>
))
)
user_id
и post_id
могут иметь разные имена, в зависимости от того, как вы построили модель Like
.
Затем в шаблоне вы можете проверить атрибут is_liked
ваших Post
объектов:
{% for post in posts %}
{% if <b>post.is_liked</b> %}
…
{% else %}
…
{% endif %}
{% endfor %}