@Gambetto

Как в Django фильтровать результат оконной функции?

Аннотирую выборку номерами строк с помощью оконной функции. Хочу, чтобы после фильтрации номер строки остался прежним.
В таком варианте фильтрация происходит до применения оконной функции:
from django.db.models import F, Window
from django.db.models.functions import RowNumber

queryset.annotate(
    num=Window(RowNumber(), order_by=F('field').asc()),
).filter(name__startswith='A')

Есть тикет на этот счёт, на который также ссылаются в комментариях к давнему вопросу.

Думал разбить действия:
ids_nums = queryset.annotate(
    num=Window(RowNumber(), order_by=F('field').asc()),
).values('id', 'num')
queryset.filter(name__startswith='A').annotate(num=???)

Но тут непонятно как связать отфильтрованные строки по id с ids_nums и аннотировать значениями num.

Возможно ли всё же реализовать такую работу без сторонних библиотек?
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы