如何计算年龄是否在出生年份的范围内,而在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组成的模型,我想查询这个模型来获取名称,使其年龄在一个范围之间。
现在,我尝试过的是
queryset = Employees.objects.all()
对于每个名称,我通过以下方式计算年龄:
code> now = datetime.datetime.now()
age = now.year-q.birth_year
ids = []
如果25< age< 36:
ids.append(q.id)
然后
i再次查询ids
Employees.objects.filter(id__in = ids)
我可以在单个查询中执行所有这些。
Employees.objects.filter(**计算年龄并比较在范围内)
范围可以是动态的。我有两个变量minAge和maxAge的范围。
任何帮助。
您可能需要使用 dateutil
中的 relativedelta
,计算时间更方便:
import datetime
from dateutil.relativedelta import relativedelta
today = datetime.date.today()
age_25 =(今天 - relativedelta(年= 25))年
age_36 =(今天 - relativedelta(年= 36))年
Employees.objects.filter(birth_year__lte = age_25, birth_year__gte = 36)
age_25
是25年36年前,您只是在25至36年前查询人们的生日。
对于 lte
和 gte
检查 django doc 。
修改:
Actu盟友,django orm支持范围
查询,所以只需执行以下操作:
员工.objects.filter(birth_year__range = [age_36,age_25])
I have a model which consists of id, name and birth year.I want to query this model to get the name such that the age is in between a range.
For now, what i have tried is
queryset= Employees.objects.all()
For each name i calculate the age by:
now = datetime.datetime.now()
age=now.year-q.birth_year
ids=[]
if 25<age<36 :
ids.append(q.id)
and then, i query once again with ids Employees.objects.filter(id__in=ids)
Can i do all this in a single query.
Employees.objects.filter(**Calculate age and compare if it is in the range)
Range can be dynamic. I have the range in two variable minAge and maxAge.
Any help.
You might want to use relativedelta
from dateutil
, it's more convenient to calculate the time:
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
is 25 years ago, age_36
is 36 years ago, you just query the people's birthdays fall between 25 and 36 years ago.
For lte
and gte
check django doc for details.
Edit:
Actually, django orm supports range
query, so just do:
Employees.objects.filter(birth_year__range=[age_36, age_25])
这篇关于如何计算年龄是否在出生年份的范围内,而在Django ORM中从Db获取出生年份的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!