如何计算年龄是否在出生年份范围内,同时从 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
我有一个由 id、name 和 birth 组成的模型 year.I 想查询此模型以获取名称,以便年龄在一个范围内。
目前,我尝试过的是
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 的范围。
任何帮助。
你可能想用relativedelta
从dateutil
,计算时间更方便:
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])
我有一个由 id、name 和 birth 组成的模型 year.I 想查询此模型以获取名称,以便年龄在一个范围内。
目前,我尝试过的是
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 的范围。
任何帮助。
你可能想用relativedelta
从dateutil
,计算时间更方便:
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])