Estoy construyendo una BlogApp y estoy atascado en un problema Lo que estoy tratando de hacer Estoy tratando de acceder a un solo usuario al que he abierto el estado del perfil en línea en la plantilla. PERO está mostrando todo el ...

0
user15207035 14 mar. 2021 a las 19:39

1 respuesta

La mejor respuesta

Simplemente puede anotar si el usuario está en línea o no usted mismo verificando si last_activity es mayor que un tiempo calculado usando Expresiones condicionales:

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)

Ahora, el usuario cuyo perfil está comprobando tendría un campo anotado is_online para que pueda comprobarlo como:

{% if online_user_activity.is_online %}
    Online
{% else %}
    Offline
{% endif %}
0
Abdul Aziz Barkat 14 mar. 2021 a las 17:26