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 %}