我有一个包含出生年份的模型,在另一个模型中我有用户注册日期。 我有一个用户id的列表,我想查询他们的年龄是否属于特定的范围年龄。用户年龄按登记日期-出生年份计算。在
我可以从当前日期开始计算为:
startAge=25
endAge=50
ageStartRange = (today - relativedelta(years=startAge)).year
ageEndRange = (today - relativedelta(years=endAge)).year
我的疑问是:
^{pr2}$这样我就得到了年龄在bw25和50之间的用户id。而不是今天,我如何使用注册日期(它是另一个模型中的一个字段)的用户。在
查询的“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')
但是,我们并不需要计算这个值,因为例如,要查询您想要的内容,请考虑以下查询:
在此基础上,您可以添加:
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))
相关问题 更多 >
编程相关推荐