【问题标题】:Django get user like from friend listDjango 从好友列表中获取用户喜欢
【发布时间】:2020-04-09 10:22:59
【问题描述】:

我是 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 %}

【问题讨论】:

  • 如果您有post,那么post.likes.all() 就是所有点赞帖子的用户。 post.likes.filter(profile__friends=some_user) 只会显示点赞帖子并且也是some_user 好友的用户。
  • @dirkgroten ....我不明白你的逻辑,你能把你的答案附在我的问题上,这样我就可以理解你的逻辑了
  • 向我们展示您如何显示一篇帖子。
  • @dirkgroten...我已经更新了我的问题,请检查

标签: python django


【解决方案1】:

如果某人不是您的朋友,您可以阻止他喜欢甚至查看(或评论)您的帖子,或者为每个喜欢您帖子的用户检查他是否在您的朋友列表中,然后将他添加到新的清空列表中然后渲染这个列表

【讨论】:

  • @Hamdi...如何让我的朋友列表中喜欢特定帖子的每个用户?如何在视图中过滤?
  • @Oghomwen 你得到你的朋友` my_friends = user.profile.friends.all() post = post.objects.filter(poster_profile = request.user.profie) post_likes = post.likes.all( ) ` 现在你只需要获取 my_friends 和 post_likes 之间的交集
  • 你能把它作为答案发布吗,代码在评论部分没有正确理解
  • @Hassen...用户的profile_pic不显示,为什么?我使用了 img = Post.objects.filter(likes__profile__friends__user=request.user) 和模板:{% for post in img %} {% endfor%}
【解决方案2】:

将您在视图中的查询集更改为:

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 }}

【讨论】:

  • 什么是“安迪”?我的回答中没有写“安迪”。查看您的错误跟踪,确定在您自己的代码中发生错误的代码行(从跟踪的底部开始,逐行到顶部,直到您看到属于到您的代码),然后告诉我们该特定行并告诉我们完整的错误。
  • 安迪是当前用户。错误点在:filter=Q(likes__profile__friends=request.user))
  • 我修复了查询,但我仍然不知道您是如何得到这个特定错误的。你应该展示你的整个home 视图
  • 用户的profile_pic不显示,为什么?我使用了 img = Post.objects.filter(likes__profile__friends__user=request.user) 和模板:{% for post in img %} {% endfor%}
  • img 是您的帖子查询集。所以在模板中你不能做img.profile
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多