繁体   English   中英

Django-列表索引超出范围

[英]Django - List index out of range

我的模型中有一个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函数用于admin list_filter,但我只想在每个多对多数组中仅显示第三个项目。

但是,使List index out of range ERROR List index out of range 顺便说说;

def get_job_categories(self):
    return self.staff_job_categories.all()[: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。第三项具有索引2。也许这是您唯一的问题?

例如尝试:

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

但是,这假设您可以确定所有员工都至少具有三个职位类别,并且其顺序是可预测的。 真的是这样吗? 认为 Django的ManyToManyField不能为您提供有关相关对象将被返回的顺序的任何保证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM