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 больше не заполняются. Что я упускаю?

Вернуться на верх