我在Django中有此查询集:
obj = Obj.objects.annotate(duration = F('date_end') - F('date_start')).order_by('duration')
以下完美地起作用:
obj[0].duration
obj.aggregate(Sum('duration'))['duration__sum']
但是,即使文档说应该进行过滤,在这种情况下过滤也不起作用:
obj = obj.filter( duration__gte = <a_class_datetime.timedelta> ) # doesn't work
obj = obj.filter( duration = 1 ) # doesn't work
这是我得到的错误:
TypeError:预期的字符串或类似字节的对象
我绕过此问题的方法是遍历数据集-这是巨大的。有关为何无法正常工作的任何提示?
[您需要在过滤时使用Python's timedelta
实例,
timedelta
此外,使用from datetime import timedelta
obj = obj.filter(duration__gte=timedelta(days=10))
指定ExpressionWrapper
,以便避免不必要的错误。
ExpressionWrapper