Одним запросом к бд не возращает количество друзей в списке мои друзья

  • models.py

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        avatar = models.ImageField(default='default.jpg', upload_to='profile_images')
        bio = models.TextField()
    
    # модель друзья
    class Friends(models.Model):
        ot_user_friends = models.ForeignKey(Profile,on_delete=models.CASCADE,related_name='ot_user_friends')
        user_tooo = models.ForeignKey(Profile,on_delete=models.CASCADE,related_name='user_tooo')
    
  • views.py

    def userlist(request):
        user_list = Profile.objects.all()
        return render(request, 'user_list/userlist.html', {'user_list':user_list})
    
    # верни мой список друзей
    def friendslist(request):
        friends_list = Friends.objects.filter(user_tooo=request.user.id)
        return render(request, 'user_list/friends.html', {'friends_list':friends_list})
    
  • шаблон: friends.html

    {% for xx in friends_list %}
        <h2>username: {{ xx.ot_user_friends.user.username }} id: {{ xx.ot_user_friends.user.id }}</h2>
        <h3>имя:{{ xx.ot_user_friends.user.first_name }} фамилия: {{ xx.ot_user_friends.user.last_name }}</h3>
        <h3>о себе: {{ xx.ot_user_friends.bio }}</h3>
        <h3>друзей: {{ xx.ot_user_friends.user.first_name }}</h3>   
    {% endfor %}
    

Описание:

В таблице Profile есть 4 пользователя || В таблице Friends поля (user_tooo - чтобы получить список моих друзей) (ot_user_friends - для получении информации каждого моего друга). Но я не могу получить количество друзей для каждого моего друга -- ПРИМЕР [саша-1,маша-2,дима-3,вика-4] Я саша-1 у меня в друзьях маша-2 а у маши в др. дима и вика. При запросе мои друзья верни список МАША - у маши -2 друзей и так для каждого кто у меня в друзьях.

МОЖЕТ Я ИСПОЛЬЗУЮ НЕ ПРАВИЛЬНУЮ СВЯЗЬ МЕЖДУ МОДЕЛЯМИ (один ко многим)


Ответы (1 шт):

Автор решения: Iaroslav Lukianchik

Я думаю вам нужно использовать связь много ко многим (m2m) для поля ot_user_friends модели Friends.

Так как текущая связь один ко многим, не позволит вам хранить в таблице Friends список пользователей-друзей.

→ Ссылка