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

2024-10-01 22:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在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

它给出了一个错误名称“出生日期”未定义

我还做了:

import datetime

我只是想在整数中找到人的年龄,但我不知道如何在datefield或datetime字段中提取年、小时等内容,请帮忙


Tags: of对象字符串py参数todaydatetimedate
2条回答

一个人的年龄不仅仅取决于年份。例如,如果一个人出生在2月1日,然后是1月1日,那么他/她比3月1日小一岁

您可以使用以下内容为您的人添加注释:

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(..)实例,进一步处理需要一点math。此外,Django doc还有一个类似的例子,check it out

相关问题 更多 >

    热门问题