Как подсчитать друзей друзей - PullRequest
0 голосов
/ 17 июня 2020

Я создаю веб-сайт, такой как Instagram, где пользователи могут подписываться на друзей, я смог реализовать подписку на друга, а также отображать друзей друзей (общий друг). Мне не удалось подсчитать количество друзей друзей; вот что я пробовал:

Модель:

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True)
    friends = models.ManyToManyField('Profile', related_name="my_friends",blank=True)

вид:

@login_required
def profile_user_view(request, username):
    #Friend of Friends
    p = Profile.objects.filter(user__username=username).order_by('-id')
    all_friends = request.user.profile.friends.values_list('pk', flat=True)
    friends_of_friend = Profile.objects.filter(pk__in=all_friends)    
context = {
    'profile_img': p,
    'friends_of_friend': friends_of_friend,
}
return render(...)

Шаблон:

{% for data in profile_img %}
{% for friend in friends_of_friend %}
{% if friend in data.friends.all %}
<li>
<a href="{% url 'site:profile-view' friend.user.username %}" class="dark-grey-text">
   <b>{{ friend.user.username|lower }}</b>
</a>
</li>
<li>
    {{ friend.count }} #This is not showing the count of friends of friends, when i use length it displays '0 0' instead of '2' (mutual friends)
</li>
{% endif %}
{% endfor %}
{% endfor %}

1 Ответ

0 голосов
/ 17 июня 2020

Вам нужно использовать friends_of_friend.count, чтобы подсчитать количество друзей текущего пользователя. Если вы хотите подсчитывать количество друзей каждого друга, используйте {{ friend.friends.count }}.

Честно говоря, вам не нужно столько контекста в шаблоне. Вы можете получить к ним доступ из атрибута {{ user }} в шаблоне. Например:

{% for friend in user.friends.all %}
  Username {{ friend.user.username | lower }}
  Count {{ friend.friends.count }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...