Skip to main content
 首页 » 编程设计

python之从 Django 中的 User.objects.all() 查询集中排除用户的好友列表

2025年02月15日22mfryf

在我的一个观点中,我覆盖了 get_queryset(self) 方法以返回一个用户列表,该列表排除了发出请求的用户的 friend 和同一用户。这是我的代码的样子:

def get_queryset(self): 
    all_users = User.objects.all() 
    user_friends = Friend.objects.friends(self.request.user) 
    # Filter all_users to exclude all elements of the user_friends queryset. 
    # Filter all_users to exclude the current user making the request. 
    # Return the filtered queryset. 

我正在使用 django-friendship处理好友请求和用户成为好友的库。在getting data about friendship section ,它说要获得用户所有 friend 的列表,所有需要做的就是 Friend.objects.friends(request.user)。我不确定这是否会返回 Friend 实例或 User 实例的列表。 Friend 模型的源代码是 here .在任何一种情况下,我将如何过滤查询集 all_users 以排除列表 user_friends 的所有元素。

请您参考如下方法:

看起来库强制友谊是相互的,所以你应该能够排除用户的 friend ,只需 User.objects.exclude(friends__from_user=self.request.user)。或者 all_user.exclude(friends__from_user=self.request.user) 如果你愿意的话。

要同时排除用户,请添加 .exclude(id=self.request.user.id)。无论是在 friend 排除调用之前还是之后都没有关系。

Friend.objects.friends(request.user) 返回一个用户列表,您可以从检查其源代码中看到: https://github.com/revsys/django-friendship/blob/ef711250a85b8d2d59af8bb7b61d088d3aea57e8/friendship/models.py#L154

行 friends = [u.from_user for u in qs] 将 Friend 实例的查询集转换为用户列表。