如何计算年龄是否在出生年份的范围内,而在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

查看:373
本文介绍了如何计算年龄是否在出生年份的范围内,而在Django ORM中从Db获取出生年份的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个由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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆