为什么Django的'annotate'变量过滤器不起作用?

问题描述 投票:2回答:1

我在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:预期的字符串或类似字节的对象

我绕过此问题的方法是遍历数据集-这是巨大的。有关为何无法正常工作的任何提示?

django annotations django-queryset
1个回答
0
投票

[您需要在过滤时使用Python's timedelta实例,

timedelta

此外,使用from datetime import timedelta obj = obj.filter(duration__gte=timedelta(days=10))指定ExpressionWrapper,以便避免不必要的错误。

ExpressionWrapper
© www.soinside.com 2019 - 2024. All rights reserved.