mas*_*oda 3 python django django-models django-queryset
我想用 Django 1.11 注释旧版 MySQL DB 上的 DateTime 和 Integer(秒)之间的差异(因此没有机会将 IntegerField 更改为 DurationField)
Report(Model):
# time the report was sent
time = DateTimeField()
# seconds since the last reboot
uptime = IntegerField()
MyModel.objects.all().annotate(
last_report=Max(time),
last_reboot=ExpressionWrapper(F('last_report') - F('uptime')), output_field=DateTimeField())
)
Run Code Online (Sandbox Code Playgroud)
如果是 DurationField(),则这可以工作uptime,但不适用于整数。所以我尝试将秒转换为时间增量
last_reboot=ExpressionWrapper(
F('last_report') - F(timezone.timedelta(seconds=1)*F('uptime')),
output_field=DateTimeField()
)
Run Code Online (Sandbox Code Playgroud)
这给了我
属性错误位于...
“CombinedExpression”对象没有属性“split”
有没有办法在查询表达式中使用 DateTimeField() 和 IntegerField() 进行计算?
我找到了一个解决方案:使用 . 将整数转换为持续时间ExpressionWrapper。当我得到秒并且 aDurationField()是微秒时,我必须将它们乘以 1,000,000。
last_reboot=ExpressionWrapper(
F('last_report') - ExpressionWrapper(
F('uptime') * 1000000,
output_field=DurationField()
),
output_field=DateTimeField()
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3572 次 |
| 最近记录: |