如何计算年龄是不是在出生年份的范围内,同时从Django ORM中的Db获取出生年份
Posted
技术标签:
【中文标题】如何计算年龄是不是在出生年份的范围内,同时从Django ORM中的Db获取出生年份【英文标题】:How to calculate if age is in range from the birth year ,while fetching the birth year from Db in Django ORM如何计算年龄是否在出生年份的范围内,同时从Django ORM中的Db获取出生年份 【发布时间】:2016-04-18 18:26:19 【问题描述】:我有一个由 id、姓名和出生年份组成的模型。我想查询这个模型以获取名称,使年龄在一个范围之间。
目前,我尝试的是
queryset= Employees.objects.all()
对于每个名字我计算年龄:
now = datetime.datetime.now()
age=now.year-q.birth_year
ids=[]
if 25<age<36 :
ids.append(q.id)
然后, 我用 id 再次查询 Employees.objects.filter(id__in=ids)
我可以在一个查询中完成所有这些吗?
Employees.objects.filter(**Calculate age and compare if it is in the range)
范围可以是动态的。我有两个变量 minAge 和 maxAge 的范围。
任何帮助。
【问题讨论】:
哥们,你把year
放在relativedelta
对象上,应该是age_from = (today - relativedelta(years=25)).year
。
【参考方案1】:
你可能想用dateutil
中的relativedelta
,计算时间更方便:
import datetime
from dateutil.relativedelta import relativedelta
today = datetime.date.today()
age_25 = (today - relativedelta(years=25)).year
age_36 = (today - relativedelta(years=36)).year
Employees.objects.filter(birth_year__lte=age_25, birth_year__gte=36)
age_25
是 25 年前,age_36
是 36 年前,您只需查询人们的生日在 25 到 36 年前之间。
对于lte
和gte
,请查看django doc 了解详情。
编辑:
其实django orm是支持range
查询的,那么就这样做吧:
Employees.objects.filter(birth_year__range=[age_36, age_25])
【讨论】:
你能解释一下它是如何工作的吗?我会试试这个,看看它是如何工作的。 我做了一些修改,你可能需要安装 dateutil。pip install python-dateutil
谢谢。这对我来说是新事物。我会尝试理解这一点。
这并不难理解。 2016年,1991年出生25岁,1980年出生36岁,只要查询[1980, 1991]
之间的出生年份即可。
是的,我实现了这个。非常感谢。以上是关于如何计算年龄是不是在出生年份的范围内,同时从Django ORM中的Db获取出生年份的主要内容,如果未能解决你的问题,请参考以下文章