查询以获取对象周围的对象

时间:2010-11-01 01:36:02

标签: python database django

让我们说我正在播放一个系列的特定剧集。 通过剧集编号获得周围剧集的最佳方式是什么?

简化型号:

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

例如,第10集会获取8-12集 第1集将获取第1-5集。

2 个答案:

答案 0 :(得分:3)

这看起来就像是将电视连续剧视为一系列剧集。如果是这样,为什么不像

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

查找集epnum周围的剧集,特别是epnum-2<=0epnum+2>Episode.object.filter(series=some_series).order_by('-number')[0].number时的情况?

如果你想要一个季节休息时的剧集被区别对待,你需要做一些更复杂的事情,比如@Scott所建议的。但除此之外,我相信这个简单的解决方案就足够了。

答案 1 :(得分:3)

以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)