Django Window-функция Lag пуста после filter()
У меня есть приложение Django, в котором я веду музыкальные чарты. Каждый чарт содержит эпизоды с позициями. Запись в эпизоде состоит из позиции и трека. Теперь я хочу отобразить эпизод из чарта вместе со всеми позициями, а также позицию трека в предыдущем и следующем эпизодах.
Мои модели построены следующим образом:
class Episode(models.Model):
chart = models.ForeignKey(
"Chart", on_delete=models.CASCADE, related_name="episodes"
)
pub_date = models.DateField()
class Track(models.Model):
artist = models.CharField()
title = models.CharField()
class Entry(models.Model):
episode = models.ForeignKey(
Episode, on_delete=models.CASCADE, related_name="entries"
)
track = models.ForeignKey(
Track, on_delete=models.CASCADE, null=True, related_name="entries"
)
position = models.PositiveIntegerField()
Мой набор запросов выглядит следующим образом:
window = {
"partition_by": [F("track")],
"order_by": [F("pub_date").asc()],
}
Entry.objects.filter(episode__chart=1).annotate(
prev_position=Window(expression=Lag("position", 1), **window),
next_position=Window(expression=Lead("position", 1), **window),
).filter(episode=3)
Когда я удаляю часть filter(episode=3), я вижу заполненные prev_position и next_position, но когда я добавляю этот последний фильтр, функции Window больше не заполняются. Что я упускаю?