2010-11-01 16 views
0

可以說我正在獲取一系列的特定情節。 通過劇集編號獲得周圍劇集的最佳方式是什麼?查詢獲取對象周圍的物體

簡化模型:

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

例如,第10集將取發作8-12。
第1集將獲取第1-5集。

回答

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的建議。但除此之外,我相信這個簡單的解決方案就足夠了。在desfido的解決方案

+0

更妙的是,粘成一個經理這一點。 – 2010-11-01 05:19:50

3

大廈:

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)