Запрос для извлечения объектов, окружающих объект - PullRequest
0 голосов
/ 01 ноября 2010

Допустим, я выбираю определенный эпизод серии.Как лучше всего получить окружающие эпизоды по номеру эпизода?

Упрощенная модель:

class Episode(models.Model):
    series = models.ForeignKey(Series)
    number = models.IntegerField()

Например, эпизод 10 будет вызывать эпизоды 8-12.
Эпизод 1будет получать эпизоды 1-5.

Ответы [ 2 ]

3 голосов
/ 01 ноября 2010

Опираясь на решение desfido:

class EpisodeManager(models.Manager):
    def get_near_objects(self, series, number):
        return self.get_query_set().filter(
            series=series, 
            number__gte=number-2, 
            number__lte=number+2)

    use_for_related = True

Тогда в вашей модели:

class Episode(models.Model):
    series = models.ForeignKey(Series)
    number = models.IntegerField()

    objects = EpisodeManager()

Теперь вы можете использовать:

Episode.objects.get_near_objects(series="Star Trek: The Original Series", number=7)
3 голосов
/ 01 ноября 2010

Похоже, вы просто относитесь к сериалу как к серии эпизодов.Если это так, то почему бы не найти что-то вроде

Episode.objects.filter(series=some_series,number__gte=epnum-2, number__lte=epnum+2)

, чтобы найти эпизоды, окружающие эпизод epnum, в особых случаях, когда epnum-2<=0 или epnum+2>Episode.object.filter(series=some_series).order_by('-number')[0].number?

если, скажем, к эпизодам на сезонных перерывах нужно относиться иначе, вам нужно сделать что-то более сложное, например, то, что предлагает @Scott.Но в остальном я считаю, что этого простого решения будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...