我正在构建一个博客 Web 应用程序,我正在尝试实现一个功能。
我想做什么:-
我正在尝试显示 Date or Time of user's signup
(就像堆栈溢出一样(2 个月以来的成员))
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
full_name = models.CharField(max_length=100,default='')
time = models.DateTimeField(auto_now_add=True)
@property
def age(self):
current_datetime = datetime.now(tz=datetime.timezone.utc)
return (current_datetime - self.time).days
模板.html
{{ request.user.profile.time }}
我试图搜索,但什么也没找到。
任何帮助将不胜感激。
提前致谢
答案 0 :(得分:1)
您可以使用 django-model-utils
。更具体地说,创建继承 TimeStampedModel
的模型。
要呈现“since”,您可以使用 django.contrib.humanize.templatetags.humanize
。
直接在代码中使用:
humanize.naturaltime(datetime.datetime.now() - yourmodelinstance.created)
在模板中使用:
{% load humanize %}
{{ yourmodelinstance.created | naturaltime }}
您的示例如下所示:
import datetime
from django.contrib.humanize.templatetags import humanize
from model_utils.models import TimeStampedModel
class Profile(TimeStampedModel):
user = models.OneToOneField(User, on_delete=models.CASCADE, default='', unique=True)
full_name = models.CharField(max_length=100, default='')
@property
def age(self):
return humanize.naturaltime(datetime.datetime.now() - self.created)
要摆脱很多毫秒,您可以将 age 属性返回值替换为:
@property
def age(self):
return humanize.naturaltime(datetime.datetime.now().replace(microsecond=0) - self.created.replace(microsecond=0)
答案 1 :(得分:1)
您可以在模型中使用 property
。通过使用它,您将能够在每次查询 age
模型时获取 Profile
from datetime import datetime, timezone
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, default='', unique=True)
full_name = models.CharField(max_length=100, default='')
time = models.DateTimeField(auto_now_add=True)
@property
def age(self):
current_datetime = datetime.now()
#current_datetime = datetime.now(timezone.utc) for tz aware datetimes
return (current_datetime - self.time).days