如何计算年龄是否在出生年份范围内,同时在Django ORM中从Db获取出生年份

时间:2016-01-13 16:52:43

标签: python mysql django django-orm

我有一个由id,name和出生年份组成的模型。我想查询这个模型以获得名称,使得年龄在一个范围之间。

目前,我所尝试的是

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的范围。

任何帮助。

1 个答案:

答案 0 :(得分:2)

您可能希望使用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年前的生日。

ltegte检查django doc了解详情。

修改

实际上,django orm支持range查询,所以只需执行:

Employees.objects.filter(birth_year__range=[age_36, age_25])