如何根据用户的profi选择用户

2024-04-19 20:19:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个复杂的查询建立在一个用户配置文件,我开始

qset = Profile.objects

一堆可以返回我的profile对象的东西(它使用Q对象,如果字段留空,还可以忽略一些字段)

我可以用selected_related()获取用户,但这仍然给我留下了一个概要文件列表,而不是一个用户列表。在

因为我的模板是为其他事情设置的,我真的很想有一个用户列表

^{pr2}$

如何将他的Profile对象查询集转换为用户查询集。在

目前我使用:

profile_userids = list(qset.values('user_id'))
user_ids = [d['user_id'] for d in profile_userids]
users = User.objects.in_bulk(user_ids)

这将导致2个查询,并将所有用户的id转换为python对象。在

如何使用在Profiles对象上生成的queryset来选择用户?在


Tags: 对象用户inidids列表objects配置文件
2条回答

使Q对象引用profile__whatever,并在User.objects.filter()中使用它们。在

结果我不得不修改模板。Django有个bug授权用户. 当视图代码看起来像:

@login_required
def test(request):
    a = User.objects.filter(pk=request.user.id).select_related('profile').get()
    return render_to_response('test.html', {'a':a,})

模板看起来像

^{pr2}$

a.get_profile忽略了配置文件是使用select\u related加载的这一事实,并对概要文件执行单独的查询。在

但是,如果您将其编码为:

@login_required
def test(request):
    a = Profile.objects.filter(user=request.user).select_related('user').get()
    return render_to_response('peeks/test.html', {'a':a,})

模板如下:

a.user.username {{ a.user.username }}<br />
a.age {{ a.age }}<br />

然后你只需一次选择就可以得到所有的信息,当你在一个页面上显示25个配置文件时,这会产生相当大的差异。在

相关问题 更多 >