我坚持使用此查询集,不知道如何正确编写它。因此,我想查看与此特定用户有关的所有相关用户,换句话说,我有一个朋友列表。
models.py
class Friend(models.Model):
user = models.ForeignKey(User, related_name="friendship_creator_set", on_delete=models.CASCADE)
friend = models.ForeignKey(User, related_name="friend_set", on_delete=models.CASCADE)
views.py
def profile(request):
friends = Friend...
context = {
'friends': friends,
}
return render(request, ..., context)
如何编写查询集以获取特定用户的用户名列表?
答案 0 :(得分:4)
您可以通过以下方式获取与给定用户成为朋友的User
的列表:
friends = User.objects.filter(friendship_creator_set__friend=request.user)
(或者,如果要检索另一个朋友,则使用特定用户代替request.user
。)
或者如果您想获得User
认为是朋友的request.user
(因此关系相反),可以使用:
friends = User.objects.filter(friend_set__user=request.user)
这些是User
对象。我们还可以通过以下方式获取Friend
对象:
friends = Friend.objects.filter(friend=request.user)
或者我们可以通过以下方式获取用户名:
usernames = User.objects.filter(
friendship_creator_set__friend=request.user
).value_list('username', flat=True)
尽管通常最好使用 model 对象,而不是使用该列的值,因为模型会将特殊的行为附加到值上。 User
比username
的{{1}}提供更多信息。