我会显示用户列表,我将其返回:
active_sessions = Session.objects.filter(expire_date__gte=timezone.now())
user_id_list = []
user_name_list = []
tot_active_sessions = active_sessions.count()
for session in active_sessions:
data = session.get_decoded()
user_id_list.append(data.get('_auth_user_id', None))
for k in user_id_list:
user_name_list.append(User.objects.filter(id__in=k))
if tot_active_sessions > _sessions_limit :
logout(request)
return render(request, 'page/users.html', context={'user_name_list': user_name_list})
在我的模板'page / users.html'中:
{% for username in user_name_list %}
{{ username }}
{% endfor %}
结果如下:
•<QuerySet [<User: guest2>]>
•<QuerySet [<User: guest1>]>
我怎样才能获得:
•guest2
•guest1
在其他情况下,我没有在我的模板上看到queryset标签,我不知道这个结果..
视图本身会生成一个QuerySet
s列表,而不是User
s列表,这是由于:
for k in user_id_list:
user_name_list.append(User.objects.filter(id__in=k))
你在这里这包括一个过滤的qazxsw poi,而不是qazxsw poi对象本身。
然而,您在视图中的代码相当复杂,并且可以在可读性和效率方面进行改进:
QuerySet
在这里,我们构建一个单独的User
,其中包含所有具有活动会话的用户,并且我们渲染该列表,我们不制作active_sessions = Session.objects.filter(expire_date__gte=timezone.now())
user_list = User.objects.filter(
id__in=[session.get_decoded().get('_auth_user_id', None) for session in active_sessions]
)
tot_active_sessions = active_sessions.count()
if tot_active_sessions > _sessions_limit:
logout(request)
return render(request, 'page/users.html', context={'user_name_list': user_list })
的QuerySet
。这将枚举用户,您还可以直接获取list
值,其中:
QuerySet
编辑:如果我们想要多次列出用户,如果用户有多个打开的会话,我们仍然可以使用单个数据库查询执行此操作,然后在列表中“展开”结果,如:
username