在我的一个观点中,我覆盖了 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 实例的查询集转换为用户列表。
