2012-10-03 63 views
0

我的模型中有一個ManyToManyField。我需要爲每個查詢獲得第三個項目,如下所示。Django - 列表索引超出範圍

class Staff(models.Model): 
    status = models.BooleanField(default=True) 
    person = models.ForeignKey(Person) 
    staff_job_categories = models.ManyToManyField(StaffJobCategory) 
    staff_titles = models.ManyToManyField(PersonTitle, null=True, blank=True) 

    def get_job_categories(self): 
      return self.staff_job_categories.all()[3] 

我使用管理list_filter的get_job_categories功能,但我只想在每許多第3項展示給許多陣列。

但是得到了 List index out of range錯誤;順便說一句, ;

def get_job_categories(self): 
    return self.staff_job_categories.all()[:3] 

工作正常。但獲取所有的對象,直到我得到我想要的。

回答

3

這應該綁定到不到3類崗位工作:

return (self.staff_job_categories.all()[2] 
     if self.staff_job_categories.count() >= 3 
     else None 
     ) 

或者:

return (self.staff_job_categories.all()[2] 
     if len(self.staff_job_categories.all()[:3]) >= 3 
     else None 
     ) 

爲了避免所有類別各顯神通。

+0

非常感謝 – tunaktunak

0

序列中的第一項有索引0.第三項有索引2.也許這是你唯一的問題?

E.g.請嘗試:

def get_job_categories(self): 
    return self.staff_job_categories.all()[2] 

但是,這假設您知道所有員工至少有三個工作類別,並且他們的訂單是可預測的。實際上是這樣嗎?我不認爲 Django的ManyToManyField爲您提供有關相關對象將返回的順序的任何保證。