Django ORM 在模板中的使用
Django ORM usage in template
我创建了包含几个学生的对象。我正在尝试使用每个学生从另一个模型中提取他的数据,因为我遍历了我的原始学生对象 student_list
。我没有 post 我创建的视图,因为我知道该对象工作正常。
我有以下型号:
class StudentDetail(Base):
student = models.OneToOneField('Usr', limit_choices_to={'user_type': 'Student'})
klass = models.ForeignKey('Klass', related_name='kara_pore')
class Usr(AbstractUser, Base):
type_choices = (
('Student', 'Student'),
('Teacher', 'Teacher'),
)
user_type = models.CharField(max_length=10,
choices=type_choices,
default='Student')
class Score(Base):
student = models.ForeignKey(Usr, limit_choices_to={'user_type': 'Student'}, related_name='scored')
subject = models.ForeignKey(Subject)
teacher = models.ForeignKey(Usr, limit_choices_to={'user_type': 'Teacher'}, related_name='marked')
exam = models.CharField(max_length=50)
exam_date = models.DateField()
score = models.IntegerField()
out_of = models.IntegerField()
模板文件:
{% for student in student_list %}
<tr>
<td> <a href=#>{{ student }}</a> </td>
<td> {{ student.student.scored.score }} </td> <-- this line doesn't work.
<td></td>
</tr>
{% endfor %}
student_list
对象有效,我可以轻松地遍历它。我正在使用该对象从分数 class 中过滤掉数据。在我看来,我以前从未使用过 Zip。而且我不知道这是否是使用它的理想情况。据我所知,使用点来跳过 classes 应该可以工作并获得我需要的值。我一定是在这里做错了什么。模板呈现,但没有显示分数。
注:这是我的看法。
def View(request, pk):
this_klass = Klass.objects.get(id=pk)
student_list = this_klass.kara_pore.all()
return render(request, "grades/view.html", {'this_klass': this_klass, 'student_list': student_list})
以下解决了问题:
{% for student in student_list %}
{% for score in student.student.scored.all %}
<tr>
<td> <a href=#>{{ student }}</a> </td>
<td> {{ score.score }} </td>
<td></td>
</tr>
{% endfor %}
{% endfor %}
我创建了包含几个学生的对象。我正在尝试使用每个学生从另一个模型中提取他的数据,因为我遍历了我的原始学生对象 student_list
。我没有 post 我创建的视图,因为我知道该对象工作正常。
我有以下型号:
class StudentDetail(Base):
student = models.OneToOneField('Usr', limit_choices_to={'user_type': 'Student'})
klass = models.ForeignKey('Klass', related_name='kara_pore')
class Usr(AbstractUser, Base):
type_choices = (
('Student', 'Student'),
('Teacher', 'Teacher'),
)
user_type = models.CharField(max_length=10,
choices=type_choices,
default='Student')
class Score(Base):
student = models.ForeignKey(Usr, limit_choices_to={'user_type': 'Student'}, related_name='scored')
subject = models.ForeignKey(Subject)
teacher = models.ForeignKey(Usr, limit_choices_to={'user_type': 'Teacher'}, related_name='marked')
exam = models.CharField(max_length=50)
exam_date = models.DateField()
score = models.IntegerField()
out_of = models.IntegerField()
模板文件:
{% for student in student_list %}
<tr>
<td> <a href=#>{{ student }}</a> </td>
<td> {{ student.student.scored.score }} </td> <-- this line doesn't work.
<td></td>
</tr>
{% endfor %}
student_list
对象有效,我可以轻松地遍历它。我正在使用该对象从分数 class 中过滤掉数据。在我看来,我以前从未使用过 Zip。而且我不知道这是否是使用它的理想情况。据我所知,使用点来跳过 classes 应该可以工作并获得我需要的值。我一定是在这里做错了什么。模板呈现,但没有显示分数。
注:这是我的看法。
def View(request, pk):
this_klass = Klass.objects.get(id=pk)
student_list = this_klass.kara_pore.all()
return render(request, "grades/view.html", {'this_klass': this_klass, 'student_list': student_list})
以下解决了问题:
{% for student in student_list %}
{% for score in student.student.scored.all %}
<tr>
<td> <a href=#>{{ student }}</a> </td>
<td> {{ score.score }} </td>
<td></td>
</tr>
{% endfor %}
{% endfor %}