Django ORM在模板中的用法

时间:2015-06-06 09:03:55

标签: django templates object orm iteration

我创建了包含少数学生的对象。当我迭代我的原始学生对象student_list时,我试图让每个学生从另一个模型中提取他的数据。我没有发布我制作的视图,因为我知道该对象工作正常。

我有以下型号:

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对象有效,我可以轻松地遍历它。我正在使用该对象来过滤Score类中的数据。我之前从未使用过Zip。而且我不知道这是否是使用它的理想情况。据我所知,使用点跳过类应该可以工作并获得我需要的价值。我一定是在做错事。模板呈现,但不显示分数。

注意:这是我的观点。

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

1 个答案:

答案 0 :(得分:0)

以下解决了这个问题:

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