我的模型中有一个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]
工作正常。但得到所有的物体,直到我得到我想要的东西。
答案 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可以保证关于相关对象的返回顺序。