模板上的queryset标签

问题描述 投票:1回答:1

我会显示用户列表,我将其返回:

    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标签,我不知道这个结果..

django templates django-queryset
1个回答
2
投票

视图本身会生成一个QuerySets列表,而不是Users列表,这是由于:

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
© www.soinside.com 2019 - 2024. All rights reserved.