如何解决如何在模板django中显示在线朋友的总数?
这是我的用户模型-
class CustomUser(AbstractUser):
user_id = models.UUIDField(default=uuid.uuid4,editable=False,primary_key=True)
username = models.CharField(max_length = 100,unique = True)
friends = models.ManyToManyField('CustomUser',related_name="friend",blank= True)
user_last_seen = models.DateTimeField(auto_now_add=False)
我可以使用以下中间件来跟踪用户最后一次被看到的时间(无论他们是否注销):
class ActiveUserMiddleware(MiddlewareMixin):
def process_request(self,request):
current_user = request.user
if request.user.is_authenticated:
now = datetime.datetime.now()
current_user.user_last_seen = now
current_user.save(update_fields=['user_last_seen'])
并且还可以在我的模板中显示它们当前处于活动状态还是最后一次被看到-
{%if i.user_last_seen|timesince|upto:',' < "1 minutes" %}
<td style="font-size:small; color:green;text-align:right;">
Active Now
</td>
{%else%}
<td style="font-size:small; color:gray;text-align:right;">
{{i.user_last_seen|timesince|upto:','}} ago
</td>
{%endif%}
与此同时,我想显示当前正在活动的用户总数,他们是与某个用户的朋友。但是我很难理解如何准确地做到这一点。我仍然是Django的初学者,任何建议或想法都将非常有帮助。
解决方法
您可以使用以下方法计数最近一次在不到一分钟前看到的数字:
from django.utils.timezone import now
from datetime import timedelta
active_users = CustomUser.objects.filter(
user_last_seen__gte=now()-timedelta(minutes=1)
).count()
或活跃朋友的数量:
from django.utils.timezone import now
from datetime import timedelta
active_friends = request.user.friends.filter(
user_last_seen__gte=now()-timedelta(minutes=1)
).count()
因此,您可以在视图或上下文处理器中使用它来将活动用户的数量传递给模板。
您还可以在CustomUser
中定义逻辑以检查用户是否处于活动状态:
from django.utils.timezone import now
from datetime import timedelta
class CustomUser(AbstractUser):
user_id = models.UUIDField(default=uuid.uuid4,editable=False,primary_key=True)
username = models.CharField(max_length = 100,unique = True)
friends = models.ManyToManyField('CustomUser',blank= True)
user_last_seen = models.DateTimeField(auto_now_add=False)
@property
def recently_active(self):
return self.user_last_seen >= now()-timedelta(minutes=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。