【发布时间】:2020-10-15 17:51:25
【问题描述】:
我正在尝试从人员列表中获取一系列年龄,但每个查询生成的年龄都会发生变化,因为这是特定事件中的年龄,所以我可以通过一个简单的循环来完成此操作,从差异中提取时间增量:
[ (event_date - user.birth_date).days/365.25 for user in User.objects.all() ]
event_date 也始终是 datatime.date 对象和 user.birth_date。我认为它是“静态的” 字段或常量,因为它在数据库之外。
这给了我正确的结果,但是由于我这样做了很多次并且我还有其他计算要做,所以我想使用 F() 表达式从数据库中生成年龄。
``from django.db.models import ExpressionWrapper, fields
diference = ExpressionWrapper(
event_date- F('birth_date'),
output_field=fields.DurationField())
qs_ages= self.annotate(age_dist=diference)
这应该给我一个名为 age_dist 的字段,它将是一个 timedelta 包含两个日期之间的总天数,所以现在我应该这样做并且应该给我与上面相同的结果。
[ User.objects.all() 中用户的 user.age_dist.days/365.25 ]
但这不起作用,结果是微秒的时间增量 我做错了什么?以及我应该如何将 event_date 的静态值包含到表达式中?
还有……超越。有没有办法从 ExpressionWrapper 中获取结果时间增量的天数?
【问题讨论】:
标签: python django django-models django-queryset python-datetime