Python Django model.objects.all()在正常调用时给出的列表索引超出范围
因此,我目前正在使用Django处理一个私人项目,当我尝试为团队加载页面时,页面上只显示“列表索引超出范围”,我使用object.all()从模型团队中获取每个团队 在模板内部,我使用for循环将每个团队发布到页面上,我一直尝试使用order_by()和first(),但它们似乎都没有帮助 我的追踪到了 我做错了什么我应该改变什么 景色 模范团队Python Django model.objects.all()在正常调用时给出的列表索引超出范围,python,django,django-models,django-views,Python,Django,Django Models,Django Views,因此,我目前正在使用Django处理一个私人项目,当我尝试为团队加载页面时,页面上只显示“列表索引超出范围”,我使用object.all()从模型团队中获取每个团队 在模板内部,我使用for循环将每个团队发布到页面上,我一直尝试使用order_by()和first(),但它们似乎都没有帮助 我的追踪到了 我做错了什么我应该改变什么 景色 模范团队 回溯的关键部分是: File "/home/melonendk/webapps/victory_genki_dk/victory/staff/mode
回溯的关键部分是:
File "/home/melonendk/webapps/victory_genki_dk/victory/staff/models.py" in teamleaders_listable
22. string = leaders[0].extendeduser.nickname
File "/home/melonendk/webapps/victory_genki_dk/lib/python3.6/Django-1.11.6-py3.6.egg/django/db/models/query.py" in __getitem__
289. return list(qs)[0]
Exception Type: IndexError at /teams/
Exception Value: list index out of range
这说明leader[0]
失败,因为self.members.filter(teammembership\uu leader=True)
是一个空查询集
您可以稍微更改代码以使用“,”.join()
,而不是在查询集中循环。当查询集为空时,这将返回空字符串'
@property
def teamleaders_listable(self):
leaders = self.members.filter(teammembership__leader=True)
return ", ".join(l.extendeduser.nickname for l in leaders)
显然
leaders
是空的,因此leaders[0]
引发了一个异常。这很有趣,因为当在另一台django服务器上使用它时,它可以正常工作,但你可能是对的另一件事,len(self.members.filter(teammembership\uu leader=True))
force评估整个查询集,如果查询集太大,可能会导致性能问题。你可以使用.count()
来代替它执行选择count(*)
:self.members.filter(teammembership\uu leader=True)。count()>1
谢谢所有提示@ozgurvatanse,我会随身携带:)你们都帮了我很大的忙谢谢much@Alasdairqs.exists()
与qs.count()相同>0
不是>1
。非常感谢你们今天基本上是我的英雄:D
File "/home/melonendk/webapps/victory_genki_dk/victory/staff/models.py" in teamleaders_listable
22. string = leaders[0].extendeduser.nickname
File "/home/melonendk/webapps/victory_genki_dk/lib/python3.6/Django-1.11.6-py3.6.egg/django/db/models/query.py" in __getitem__
289. return list(qs)[0]
Exception Type: IndexError at /teams/
Exception Value: list index out of range
@property
def teamleaders_listable(self):
leaders = self.members.filter(teammembership__leader=True)
return ", ".join(l.extendeduser.nickname for l in leaders)