【问题标题】:How to show the total count of online friends in the template (django)?如何在模板(django)中显示在线好友总数?
【发布时间】:2021-01-30 04:07:42
【问题描述】:

这是我的用户模型-

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 的初学者,任何建议或想法都会很有帮助。

【问题讨论】:

  • &lt;"1 minutes" 将不起作用。这只是比较字符串。所以"1 hour" &lt; "1 minutes",所以现在在线的人会很活跃。此外,活跃用户将始终在线。

标签: django django-templates django-3.1


【解决方案1】:

您可以使用以下方法计算最后一次看到的次数少于一分钟:

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)

【讨论】:

  • 你的代码就像一个魅力。我意识到我错过了一个主要方面,我实际上是在尝试跟踪与某个用户成为朋友的在线用户总数,而不是整体。如何在视图中找到它以及您提供的代码?很抱歉没有早点更新帖子,我已经更新了。
  • @justbeingalearner:查看活跃好友数量的编辑。 request.user 是登录用户。
猜你喜欢
  • 2017-08-18
  • 2017-11-13
  • 2016-05-06
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2012-03-18
相关资源
最近更新 更多