数值数据的条件表达式 - Python/Django

Conditional expressions on numerical data - Python/Django

让我给你展示一个这样的情况:

data = [Station.objects
                        .filter(nr=form.cleaned_data['station'])
                        .aggregate(avg=Avg('residual'),
                                   stdev=StdDev('residual'),
                                   number=Count('residual'),
                                   good_observations = Count(Case(When(abs('residual')<250))),
                                   outliers=Count(Case(When(abs('residual')>=250))),
                                   )]

我想计算数据库中 "residual"(浮点值)小于或大于 250 的行数,但它不起作用。

首先:我有 TypeEror:

init() takes either a Q object or lookups as keyword arguments

其次:

abs() 函数由于 TypeError 和字符串值作为输入而无法工作。

我希望你们中的一些人能帮助我解决这个问题:)

如错误消息中所述,When__init__ 采用关键字参数或 Q objects,非常类似于 QuerySet.filter。您可以使用 Q 对象模仿 abs

When(Q(residual__lt=250) & Q(residual__gt=-250))  # -250 < residual < 250
When(Q(residual__gte=250) | Q(residual__lte=-250))  # other cases