Этого можно добиться, создав собственный тег шаблона для запроса сообщений для вошедшего в систему пользователя. Хотя это и необязательно, для меня хорошим местом для этого запроса будет модель Post.
class Post(models.Model):
content = RichTextField()
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
datetime = models.DateTimeField(auto_add_now=True)
def user_reactions(self, user):
return self.reactions.filter(author=user)
Затем вам потребуется создать собственный шаблонный тег для вызова этого метода в объекте post при передаче в запросе пользователя.
from django import template
register = template.Library()
@register.simple_tag # (Django >= 1.9, earlier versions need to use `assignment_tag`)
def post_user_reactions(post, user):
return post.user_reactions(user)
Это вернет набор запросов для этого пользователя, который можно затем выполнить в шаблоне:
{% post_user_reactions post user as user_reactions %}
{% for reaction in user_reactions %}
Do stuff with reaction object
{% endfor %}
Пожалуйста, имейте в виду что выполнение запросов к базе данных в for-l oop (как вы, вероятно, скажете, если в этом случае отображаете список сообщений) может оказаться очень дорогим. Для этого вам понадобится добавить prefetch_related
или аннотацию набора запросов.
Как совет, Django ORM - это немного другой способ представления о доступе к базе данных, чем традиционный SQL. Думать о «левом соединении» не поможет - вам нужно думать о Django объектах и их отношениях.