我在Django中有这个查询集:
Select * from
(Select nombre, codigo, estado
From your_table)
Pivot
(Max(estado) for codigo in ('ES', 'IT');
以下内容可以正常工作:
obj = Obj.objects.annotate(duration = F('date_end') - F('date_start')).order_by('duration')
但是,即使文档说应该进行过滤,在这种情况下过滤也不起作用
obj[0].duration
obj.aggregate(Sum('duration'))['duration__sum']
这是我得到的错误:
TypeError:预期的字符串或类似字节的对象
我绕过此问题的方法是遍历数据集-这是巨大的。为什么这不起作用的任何提示?
答案 0 :(得分:1)
您需要在过滤时使用Python's timedelta
实例,
from datetime import timedelta
obj = obj.filter(duration__gte=timedelta(days=10))
除此之外,使用ExpressionWrapper
指定 output_field
,以便避免不必要的错误。
from django.db import models
# for annotation
annotated_queryset = Foo.objects.annotate(
duration=models.ExpressionWrapper(models.F('date_end') - models.F('date_start'),
output_field=models.DurationField()))
# for filtering
from datetime import timedelta
filtered_queryset = annotated_queryset.filter(duration__gte=timedelta(days=10))