How to get mutual followers (mutual friend) for users - Django

How do I get mutual followers (friends of friends) with request.user to be displayed for each users posts, I was able to display the count for mutual followers for each users posts on newsfeed. How can I get it done?

What I tried: I was able to do this but I do not think it is the best way because when I use slice to show three mutual users images it does not work properly for all users.

This is what I tried:

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True) 
    profile_pic = models.ImageField(upload_to='UploadedProfilePicture/', default="ProfileAvatar/avatar.png", blank=True)
    following = models.ManyToManyField(
        'Profile',  # Refers to the User model itself
        symmetrical=False,  # If A follows B, B doesn't automatically follow A
        related_name='followers',  # Reverse relationship: get followers of a user
        blank=True,
    )

class Post(models.Model):
    poster_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, blank=True,null=True)

def following_view(request):
    posts = Post.objects.filter(
        Q(poster_profile__profile__followers__user=request.user)).order_by("?").distinct()
    mymutual_followers = request.user.profile.following.filter(id__in=request.user.profile.following.values_list('id', flat=True))

{% for post in posts %}
{% for user_following in mymutual_followers %}
  {% if user_following in post.poster_profile.profile.following.all|slice:"3" %}
  <img src="{{ user_following.profile_pic.url }}" class="hover-followers-img"/>
  {% endif %}
  {% endfor %}
{% endfor %}

The code above is what I tried and it worked, but add slice:"3" to show just 3 images do not work properly for some users, so I think maybe it's not the best approach.

The code below is how I got the count of mutual followers and it work perfectly but could not display the mutual followers images; how can I get it done?

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=True,null=True) 
    profile_pic = models.ImageField(upload_to='UploadedProfilePicture/', default="ProfileAvatar/avatar.png", blank=True)
    following = models.ManyToManyField(
        'Profile',  # Refers to the User model itself
        symmetrical=False,  # If A follows B, B doesn't automatically follow A
        related_name='followers',  # Reverse relationship: get followers of a user
        blank=True,
    )

class Post(models.Model):
    poster_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, blank=True,null=True)

def following_view(request):
    posts = (
        Post.objects.filter(Q(poster_profile__profile__followers__user=request.user)).order_by("?")
        .annotate(
            mutual_count=Count(
                'poster_profile', filter=Q(poster_profile__profile__following__followers__user=request.user)
            ) # Got the count for mutual followers
        )
        .prefetch_related( # what am I doing wrong here....
            Prefetch(
                'poster_profile',
                Post.objects.annotate(
                    is_mutual=Exists(
                        Post.objects.filter(
                            poster_profile=OuterRef('pk'),
                            poster_profile__profile__followers__user=request.user,
                        )
                    )
                ).filter(is_mutual=True),
                to_attr='mutual_followers',
            )
        )
    )

# Template

{% for post in posts %}
{{ post.mutual_count }} # Got mutual count
{% endfor %}

# This is not displaying images.
{% for post in posts %}
{% for img in post.mutual_followers %}
  <img src="{{ img.profile_pic.url }}" class="hover-followers-img"/>
  {% endfor %}
  {% endfor %}
Вернуться на верх