从特定用户获取值-Django中的queryset

时间:2019-05-24 12:59:53

标签: django

我坚持使用此查询集,不知道如何正确编写它。因此,我想查看与此特定用户有关的所有相关用户,换句话说,我有一个朋友列表。

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)

如何编写查询集以获取特定用户的用户名列表?

1 个答案:

答案 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 对象,而不是使用该列的值,因为模型会将特殊的行为附加到值上。 Userusername的{​​{1}}提供更多信息。