有没有人能给我解释一下,为什么我无法计算出这个问题是什么。 我想数一数每个学生借的所有书
def view_student(request):
issues = Student.objects.all()
for issue in issues:
borroweds = Issue.objects.filter(borrower_id__student_id = issue.student_id).count()
print(borroweds)
return render(request, 'view_student.html', {'borroweds':borroweds})
tml代码是这样的
{% for student in students %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ student.student_id }}</td>
<td>{{ student.name }}</td>
<td>{{ student.batch }}</td>
<td>{{ student.semester }}</td>
<td><a href="{% url 'all_borrowed' student.student_id %}"> {{ borroweds }}</a> </td>
</tr>
{% endfor %}
这给了我一份所有借书的学生的名单print(borroweds)
而在模板中{{ borroweds }}
给了我0
的
我是不是把它称为视图中代码的错误方式
class Student(models.Model):
school = models.ForeignKey(School, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
student_id = models.CharField(max_length=20, unique=True)
class Issue(models.Model):
borrower_id = models.ForeignKey(Student,on_delete=models.CASCADE)
book_id = models.ForeignKey(Books,on_delete=models.CASCADE)
issue_date = models.DateField(default=datetime.date.today)
在for循环的每次迭代中,您都要覆盖
borroweds
。 不要迭代Django查询集,通常不需要这样做相反,使用annotate和count
在模板中,您可以通过以下方式访问它:
问题是,每次循环处理问题时,都会重新声明borroweds变量。因此,当循环结束时,最后一个人(即issues queryset的最后一期实例)借的书的数量将留给您。这就是你可能得到零分的原因
您应该能够使用Aggregation: Following relationships backwards执行类似的操作
这不是开箱即用的,我不确定你的模型是如何设计的。如果你发布它们,我可以进一步帮助你
如果您对模型进行了自定义,它会将字段
issue__count
添加到每个Student
相关问题 更多 >
编程相关推荐