Skip to main content
 首页 » 编程设计

python之我如何获得所有喜欢一个对象的 friend 的对象列表

2025年05月04日10开发

我有两个模型:Like 和 Object。我如何使用以下模型检索喜欢该对象的相应人员集:

class Object(models.Model): 
    ... 
 
class Like(models.Model): 
    user = models.ForeignKey(User) 
    object = models.ForeignKey(Object) 
 
friends = [...some list of ids...] 

我考虑过这两种方法:使用 Object 或使用 Like,但都不起作用。例如:

Object.objects.prefetch_related('like_set').filter(like__user__in=friends) 

这会为每个对象获取相应的点赞集,但每个 like_set 将包含所有点赞,而不是我 friend 的点赞。

另一种方式是通过点赞:

Like.objects.select_related('object').filter(user__in=friends) \ 
                                     .order_by('-user_id').distinct('object') 

但我相信这种方式只会让我喜欢每个对象。那么有没有什么办法可以让我的 friend 对每个对象都点赞呢?

编辑:为了澄清,我需要与每个对象对象相对应的用户对象列表,因为我希望能够打印出它们的名称。我还想尽量减少查询数量,并且愿意使用原始 SQL。

请您参考如下方法:

这应该可以满足您的需求,但您确实需要一个 ManyToMany在你的 Friends 模型上添加到 Objects 并将其命名为 likes。

from collections import Counter 
 
likes_of_friends = Like.objects.filter(friends__in=friend_list) 
objects_of_likes = likes_of_friends.values_list('object__pk',flat=True) 
number_of_likes = dict(Counter(list(objects_of_likes))) 
 
for key,val in number_of_likes.iteritems(): 
   print 'My friends like %s object %d times' % (Object.objects.get(pk=key),val)