首先,让我原谅我的英语 - 这不是我的母语。传递模板的几个参数
我有以下型号:
class Student(models.Model):
student_id = models.IntegerField(primary_key=True)
student_name = models.CharField(max_length=255, default='John Doe')
dob = models.DateField(max_length=8)
class Group(models.Model):
group_name = models.CharField(max_length=40)
monitor = models.ForeignKey(Student)
class Student_Group(models.Model):
student_id = models.ForeignKey(Student)
group_name = models.ForeignKey(Group)
我需要渲染的学生,其显示器和学生各组量的群体。制作前两项任务是没有问题的:
views.py:
def group_list(request):
groups = Group.objects.all()
return render(request, 'groups/group_list.html', {'groups': groups})
groups.html
{% for group in groups %}
<p>{{ group.group_name }}</p>
<p>{{ group.monitor }}</p>
{% endfor %}
但是,当涉及到渲染的学生数量为每个组,我陷入困境。
下面的SQL可以在给定的组数学生的数量
select count(*) from students_student
join students_student_group
on students_student.student_id = students_student_group.student_id_id
where students_student_group.group_name_id = "Mega nerds"
的问题是:
如何让学生使用Django ORM代替每组的金额,所以模板将渲染以下信息:
- 组名:兆级书呆子
- 金额的学生:8
- 显示器:李四
...
- 组名:好人
- 金额的学生:11
- 显示器:约翰·苹果核战
- 如何将有关学生数量的数据传递给相应的组。
谢谢。
更新
据@Gocht的建议,我用ManyToManyField,所以我现在models.py
看起来
class Student(models.Model):
student_id = models.IntegerField(primary_key=True)
student_name = models.CharField(max_length=255, default='Василий Пупкин')
dob = models.DateField(max_length=8)
def __str__(self):
return self.student_name
class Group(models.Model):
group_name = models.CharField(max_length=40, primary_key=True)
monitor = models.ForeignKey(Student)
students = models.ManyToManyField(Student, related_name='students')
此外,作为建议,我已经添加了装饰到Group
类:
@property
def get_students_qty(self):
return self.students.all().count()
所以现在我可以得到每个组的学生数量,如下所示:
{% for group in groups %}
<p>{{ group.group_name }}</p>
<p>{{ group.monitor }}</p>
<p>{{ group.get_students_qty }}</p>
{% endfor %}
但我仍然想知道 - 是否有可能在不使用装饰器的情况下获得组的学生人数?毕竟,Group
类有students
场...
对不起,我就需要什么还不清楚。我编辑了我的问题,请考虑查看,非常感谢 –
@mr_bulrathi编辑 – Gocht