我想用每个部门的医生数量填充数组'v',我得到了这个错误:
v[i]=Doctor.objects.all().filter(idDept__deptName__contains=s.deptName).count()
~^^^
IndexError:列表赋值索引超出范围
views.py
def accueilAdmin(request):
if not request.user.is_staff:
return redirect('loginAdmin')
depts=Department.objects.all()
v=[]
i=1
for s in depts:
v[i]=Doctor.objects.all().filter(idDept__deptName__contains=s.deptName).count()
i+=1
models.py
class Department(models.Model):
deptName = models.CharField(max_length=50, null=False)
...
return self.deptName
class Doctor(models.Model):
name= models.CharField(max_length=50)
...
idDept = models.ForeignKey(Department, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.name
我不知道该怎么解决,希望你能帮忙,谢谢。
2条答案
按热度按时间bn31dyow1#
索引从
0
开始,您可以使用以下命令追加到列表中:但这可能是不必要的,也是无效的,你可以用
Doctor
的数量来注解你的Department
:depts
中的Department
对象将有一个额外的属性.num_doctors
,其中包含相关的Doctor
的数量。这是在 same 查询中完成的,因此它极大地减少了查询量:注意:函数一般用 snake_case 编写,而不是 PascalCase,因此建议将函数重命名为
accueil_admin
,而不是accueilAdmin
。ebdffaop2#
我是一个新手,但也许我的想法会帮助你:lists枚举以'0'开始,在www.example.com中views.py,您将value分配给'v'等于空list,因此那里没有元素(不是'1st' elem也不是'0'),尽量不要引用元素(v[i])的索引,而是v.append,不是好的解决方案,但它可以临时帮助调试您的应用程序:当赋值到/create 'v'时-使其像具有现有元素的列表:v = list(range(1000))