在 Django 中过滤窗口函数

Cod*_*ice 10 python django django-models django-queryset window-functions

我有以下模型:

class Foobar(models.Model):
    foo = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

我弄清楚了如何foo使用窗口函数计算连续字段的增量:

qs = Foobar.objects.annotate(
    delta=F('foo') - Window(
        Lag('foo'),
        partition_by=F('variant'),
        order_by=F('timestamp').asc(),
    )
)
Run Code Online (Sandbox Code Playgroud)

现在我只想要来自负数的记录delta

qs.filter(delta__lte=0)
Run Code Online (Sandbox Code Playgroud)

但正如您所料,这会产生错误:

django.db.utils.NotSupportedError: Window is disallowed in the filter clause.
Run Code Online (Sandbox Code Playgroud)

我如何使用 Django ORM 进行此过滤?

jnn*_*nns 8

Django 4.2 支持对 WINDOW 表达式进行过滤。请参阅发行说明以及拉取请求