Django - 列表索引超出范围

时间:2012-10-03 12:32:41

标签: python django arrays django-models

我的模型中有一个ManyToManyField。我需要为每个查询获取第三项,如下所示。

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]

我使用get_job_categories函数来管理list list_filter,但是我想只显示每个多对多数组中的第3个项目。

但是得到了    List index out of range 错误; 顺便说一下;

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

工作正常。但得到所有的物体,直到我得到我想要的东西。

2 个答案:

答案 0 :(得分: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
       )

避免所有类别重新计算。

答案 1 :(得分:0)

序列中的第一项具有索引0.第三项具有索引2.也许这是您唯一的问题?

E.g。尝试:

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

但是,这假设您确定所有员工至少有三个工作类别,并且他们的订单是可预测的。实际情况是这样的吗?我不认为 Django的ManyToManyField可以保证关于相关对象的返回顺序。