У меня есть модель UserProfile и модель друзей. Я отображаю список профилей на странице в шаблоне и хочу отметить, является ли UserProfile другом текущего пользователя, когда отображаются все.
В идеале я бы хотел избежать вложенного цикла в шаблоне, где мне нужно сравнить Friend Queryset с UserProfile Queryset, чтобы увидеть, есть ли совпадение.
У меня есть модели как таковые (дополнительные поля не показаны):
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
friends = models.ManyToManyField("self", through='relationship.Friend', symmetrical= False, related_name= 'friend_to+' )
class Friend(models.Model):
from_userprofile = models.ForeignKey("profile.UserProfile",
related_name='from_profile', on_delete=models.CASCADE)
to_userprofile = models.ForeignKey("profile.UserProfile",
related_name='to_profile', on_delete=models.CASCADE)
status = models.IntegerField(choices=RELATIONSHIP_STATUSES)
date_connected = models.DateTimeField(auto_now=False,
auto_now_add=True)
В представлениях я сначала получаю все пользовательские профили, а затем текущих пользователей. Друзья, как это:
profile_query = UserProfile.objects.all().exclude(Q(user_id=request.user.id)).
select_related('user')
current_user_friends = Friend.objects.filter(Q(from_userprofile__user_id=request.user.id)
& Q(status__exact=1))
Теперь я хочу эффективно выяснить, кто из Пользователей в наборе "profile_query" также находится в наборе "current_user_friends", и объединить эту информацию, если это возможно, в один отдельный список или словарь или Queryset, который я могу использовать в шаблон.
Я бы хотел пройтись по циклу и создать новое поле или значение с именем «isFriend» с «True» или «False». Я бы хотел сделать тяжелую работу в представлениях.
Я пытался передать два набора запросов в контекст шаблона с именами «profile» и «user_friends», что-то вроде следующего, что, вероятно, является глупым способом сделать это (в любом случае у него есть некоторые проблемы на стороне «else») :
{% for friend in user_friends %}
{% if friend.to_userprofile.user_id == profile.user_id %}
<div>FRIEND</div>
{% else %}
<div>NOT FRIEND</div>
{% endif %}
{% endfor %}
Любая помощь будет принята с благодарностью. У меня возникают проблемы с визуализацией того, как наилучшим образом использовать отношения между этими моделями для выполнения минимальных запросов к базе данных и получения нужного мне результата.
Приветствие
Marco