Как получить взаимные последователи (общий друг) для пользователей - djangoPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как получить взаимные последователи (общий друг) для пользователей - django

Сообщение Anonymous »

Как мне получить взаимные подписчики (друзья друзей) с request.user, который будет отображаться для каждого пользователя, я смог отобразить счет для взаимных подписчиков для каждого пользователя по сообщениям о новостных лентах. Как я могу сделать это? Их взаимный последователь показывает только 1 изображение вместо 3, а пользователь имеет 3 взаимных подписчика. < /p>
Это то, что я попробовал: < /p>
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" %}
Изображение
{% endif %}
{% endfor %}
{% endfor %}
< /code>
Приведенный выше код - это то, что я попробовал, и он работал, но добавьте срез: «3», чтобы показать, что только 3 изображения не работают должным образом для некоторых пользователей, поэтому я думаю, что, возможно, это не лучший подход. Как это сделать? < /p>
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 %}
Изображение
{% endfor %}
{% endfor %}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ers-django
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»