首先,讓我原諒我的英語 - 這不是我的母語。傳遞模板的幾個參數
我有以下型號:
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