繁体   English   中英

如何在出生日期的日期字段中提取年份并在 django views.py 中计算人的年龄?

[英]how to extract year in date field of date of birth and calculate age of person in django views.py?

我正在尝试在 views.py 中执行此操作

ExtractYear(date_of_birth) - today.year

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

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

并且它给出了 int() 参数的错误必须是一个字符串,一个类似字节的 object 或一个数字,而不是“ExtractYear”

如果我尝试这样做:

date_of_birth_year - today.year

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

我也做了:

import datetime

我只是想在 integer 中找到人的年龄,我不知道如何在日期字段或日期时间字段中提取年份、小时等内容,请提供帮助。

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

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

from django.db.models.functions import ExtractYear

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

从此查询集产生的MyModel将有一个额外的属性.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')
)

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

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

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(..)实例,进一步处理需要一点数学 此外,Django doc 也有类似的示例, 请查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM