如何使用Django ORM计算从出生年份到注册日期的用户年龄

2024-06-26 10:16:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含出生年份的模型,在另一个模型中我有用户注册日期。 我有一个用户id的列表,我想查询他们的年龄是否属于特定的范围年龄。用户年龄按登记日期-出生年份计算。在

我可以从当前日期开始计算为:

startAge=25
endAge=50
ageStartRange = (today - relativedelta(years=startAge)).year
ageEndRange = (today - relativedelta(years=endAge)).year

我的疑问是:

^{pr2}$

这样我就得到了年龄在bw25和50之间的用户id。而不是今天,我如何使用注册日期(它是另一个模型中的一个字段)的用户。在


Tags: 用户模型id列表todayyear用户注册年份
1条回答
网友
1楼 · 发布于 2024-06-26 10:16:19

查询的“today”版本很容易实现,因为“today”日期不依赖于行中的各个字段。在

F表达式

您可以研究Django的F表达式,因为它们允许您在查询中引用模型的字段(无需将它们拉入Python)

https://docs.djangoproject.com/en/1.7/topics/db/queries/#using-f-expressions-in-filters

例如,对于你来说,年龄应该是F表达式:

F('registration_date__year') - F('birth_year')

但是,我们并不需要计算这个值,因为例如,要查询您想要的内容,请考虑以下查询:

Model.filter(birth_year__lte=F('regisration_date__year') - 25)

在此基础上,您可以添加:

birth_year__gte=F('regisration_date__year') + 50

或者使用birth_year__range=(F('regisration_date__year') - 25, F('regisration_date__year') + 50))

备选方案:预先计算年龄

否则,您可以预先计算年龄,因为该值在用户注册时间是已知的

^{pr2}$

一旦它被保存下来,就很简单了Model.filter(age__range=(25, 50))

相关问题 更多 >