让我们说我正在播放一个系列的特定剧集。 通过剧集编号获得周围剧集的最佳方式是什么?
简化型号:
class Episode(models.Model):
series = models.ForeignKey(Series)
number = models.IntegerField()
例如,第10集会获取8-12集 第1集将获取第1-5集。
答案 0 :(得分:3)
这看起来就像是将电视连续剧视为一系列剧集。如果是这样,为什么不像
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所建议的。但除此之外,我相信这个简单的解决方案就足够了。
答案 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)