如何在 online_users 中仅过滤一个用户

问题描述

我正在构建一个博客应用程序,但我遇到了一个问题

我想做什么

我正在尝试仅访问模板中的 one user which i have opened the profile 在线状态。但它显示了所有活跃用户

我在做什么

我使用 online_users_activity 知道哪个用户在线。我使用 This django_online_users

问题

显示所有在线用户

views.py

def online(request,user_id):
    user_status = online_users.models.OnlineUserActivity.get_user_activities(timedelta(hours=87600))
    users = (user for user in user_status)

    context = {'users':users}
    return render(request,'online.html',context)

我不知道该怎么办。

任何帮助将不胜感激。

解决方法

您可以通过使用 Conditional Expressions 检查 last_activity 是否大于某个计算时间来简单地注释用户是否在线:

from django.db.models import BooleanField,Case,Value,When
from django.shortcuts import get_object_or_404
from django.utils import timezone

def online(request,user_id):
    min_time = timezone.now() - timedelta(hours=87600)
    queryset = online_users.models.OnlineUserActivity.objects.filter(user_id=user_id).annotate(
        is_online=Case(
            When(last_activity__gte=min_time,then=Value(True)),default=Value(False),output_field=BooleanField(),)
    )
    online_user_activity = get_object_or_404(queryset)
    context = {'online_user_activity': online_user_activity}
    return render(request,'online.html',context)

现在,您正在检查其个人资料的用户将有一个带注释的字段 is_online,因此您可以检查为:

{% if online_user_activity.is_online %}
    Online
{% else %}
    Offline
{% endif %}