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

Я новичок Django, у меня есть поле друга в модели профиля, в котором перечислены все мои друзья. А также этим друзьям понравился мой пост. Как получить имена только тех пользователей из моего списка друзей, которые будут отображаться в понравившемся им сообщении.

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,... )
    friends = models.ManyToManyField('Profile',related_name='my_friends')

class FriendRequest(models.Model):
    to_user = models.ForeignKey(settings.AUTH_USER_MODEL,... ) 
    from_user = models.ForeignKey(settings.AUTH_USER_MODEL,... ) 

class Post(models.Model):
    poster_profile = models.ForeignKey(settings.AUTH_USER_MODEL,... )
    likes = models.ManyToManyField(User, related_name='image_likes')

def home(request):
    all_images = Post.objects.filter(poster_profile=request.user) 
    img = Post.objects.filter(likes__profile__friends__user=request.user)

{% if all_images %}
{% for post in all_images %}

#all_images code here 

{{ post. likes.count }} #like count

{% for image in img %}<img src="{{ image.profile.profile_pic.url }}"> {% endfor %}#The profile_pic do not display 

{% endfor %}
{% endif %}

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Измените ваш набор запросов в своем представлении следующим образом:

from django.db.models import Count, Q

all_images = Post.objects\
    .filter(poster_profile=request.user)\
    .annotate(likes_count=Count(
        'likes', 
        distinct=True, 
        filter=Q(likes__profile__friends=request.user.profile))

, затем в вашем шаблоне каждый post имеет аннотацию likes_count, так что вы можете сделать {{ post.likes_count }}.

0 голосов
/ 09 апреля 2020

если кто-то не ваш друг, вы можете запретить ему лайкнуть или даже увидеть (или прокомментировать) ваше сообщение, или для каждого пользователя, которому нравится ваше сообщение, проверьте, есть ли он в вашем списке друзей, и добавьте его в новый список. затем вывести этот список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...