python - 如何在 django 中获取模型对象的数量
问题描述
有人会尝试向我解释为什么我无法计算查询是什么。 我想统计每个学生借的所有书
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)
解决方案
您在borroweds
for 循环的每次迭代中都将被覆盖。不要遍历 Django 查询集,通常不需要这样做。
相反,请使用注释和计数。
from django.db.models import Count
def view_student(request):
students = Student.objects.annotate(borrowed_books=Count('issue'))
return render(request, 'view_student.html', {'students':student})
在您的模板中,您可以通过以下方式访问它:
{% for student in students %}
{{ student.borrowed_books }}
{% endfor %}
推荐阅读
- salesforce - Salesforce 闪电出局
- delphi - 在 BeginThread 方法中传递指向对象的指针
- php - 在 HTML/PHP 下拉列表中列出枚举字符串,其中包含来自 2 个 MSSQL 表的值
- wordpress - 海量动态主题购物车页面
- python - Mongoengine - 以可读格式返回日期
- linux - 使用 oracle PL/SQL SP 在不同的 Linux 服务器上运行 Shell 脚本
- c# - C# WebClient 在 POST 请求中上传 JSON
- python-3.x - 如何使用 Selenium 和 Python 计算包含一个或多个相同类属性的元素的数量?
- haskell - Haskell HXT 拆分 XML 数据
- javascript - 如何将输入字段类型=“密码”转换为角度类型=“文本”?