0

我的模型中有一个 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]

我对管理员 list_filter 使用 get_job_categories 函数,但我只想显示每个多对多数组中的第三项。

但是得到 List index out of range错误;顺便一提;

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

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

4

2 回答 2

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
       )

避免所有类别重新计算。

于 2012-10-03T12:37:08.050 回答
0

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

例如尝试:

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

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

于 2012-10-03T12:35:38.233 回答