【问题标题】:how to extract year in date field of date of birth and calculate age of person in django views.py?如何在 django views.py 中提取出生日期的日期字段中的年份并计算人的年龄?
【发布时间】:2020-07-05 15:01:50
【问题描述】:

我正在views.py中尝试这样做

ExtractYear(date_of_birth) - today.year

但是使用 int 会出错,我试过这样:

int (ExtractYear(date_of_birth) )- int(today.year)

它给出了 int() 参数的错误必须是一个字符串、一个类似字节的对象或一个数字,而不是 'ExtractYear'

如果我尝试这样做:

date_of_birth_year - today.year

它给出了名称“date_of_birth_year”未定义的错误

我也做过:

import datetime

我只是想以整数形式查找人的年龄,但我不知道如何在日期字段或日期时间字段中提取年份、小时等内容,请帮助。

【问题讨论】:

  • 一个人的年龄不仅仅取决于年份。例如,如果一个人在二月一日出生,那么在一月,他比三月小一岁。
  • 我只是想提取年份,这东西还不是我的喜好。

标签: python django django-models django-views django-templates


【解决方案1】:

一个人的年龄不仅仅取决于年份。例如,如果一个人在二月一日出生,那么一月一日,他/她比三月一日小一岁。

您可以使用以下方式注释您的人:

from django.db.models.functions import ExtractYear

MyModel.objects.annotate(
    date_of_birth_year=ExtractYear('date_of_birth_year')
)

由此查询集产生的MyModels 将有一个额外的属性.date_of_birth_year,其中包含date_of_birth 的年份。您还可以注释包含此人“年龄”的字段age

from django.db.models.functions import ExtractYear
from django.utils.timezone import now

MyModel.objects.annotate(
    age=now().year - ExtractYear('date_of_birth_year')
)

但因此这个年龄并不完全正确。

【讨论】:

    【解决方案2】:

    另一种可能的解决方案是:

    from django.db.models import F, ExpressionWrapper
    from django.db.models.functions import Now 
    
    Model.objects.annotate(
        delta = ExpressionWrapper(
        Now() - F('date_of_birth'), output_field=models.DateTimeField()
      )
    )
    
    

    然后,instance.delta 将是 datetime.timedelta(..) 实例,需要进一步处理一点点 math。另外,Django doc 有一个类似的例子,check it out

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多