重塑django queryset以在模板中显示

重塑django queryset以在模板中显示,django,django-views,django-templates,Django,Django Views,Django Templates,我正在学习Django,并试图构建一个简单的学生成绩发布系统。我已按如下方式设置了我的模型类: class Student(models.Model): name= models.CharField(max_length=30) rollNum=models.CharField(max_length=12) faculty=models.CharField(max_length=10) def __str__(self): return self.

我正在学习Django,并试图构建一个简单的学生成绩发布系统。我已按如下方式设置了我的模型类:

class Student(models.Model):
    name= models.CharField(max_length=30)
    rollNum=models.CharField(max_length=12)
    faculty=models.CharField(max_length=10)
    def __str__(self):
        return self.name

class Tutorial(models.Model):
    name=models.CharField(max_length=10)
    def __str__(self):
        return self.name

class Grade(models.Model):
    grade=models.CharField(max_length=2)
    student=models.ForeignKey(Student,on_delete=models.CASCADE)
    tutorial=models.ForeignKey(Tutorial,on_delete=models.CASCADE)
    def __str__(self):
        return self.student.name+ '|' + self.tutorial.name+ '|' +self.grade  
    class Meta:
        unique_together = ('student','tutorial')
Grade.objects.filter().values\u list('student\u name'、'tutorial\u name'、'Grade')
正在以以下形式返回QuerySet:

Student1 Tutorial1 A
Student2 Tutorial1 A+
Student1 Tutorial2 B
Student1 Tutorial3 A
{'Student1': {'Tutorial1': 'A', 'Tutorial1': 'A'}, 'Student2': {'Tutorial2': 'A'}, 'Student3': {'Tutorial1': 'A', 'Tutorial1': 'A'}}
如何将结果重塑为以下形式

Student Tutorial1 Tutorial2 Tutorial 3
Student1     A       B         A
Student2     A+      X         X
我想在django模板中呈现这个

编辑:我的观点

def results(request):
    grades=Grade.objects.filter().values_list('student__name','tutorial__name','grade')
    return render(request,'results/index.html',{"a":grades})
在前面,我尝试以以下形式简化发送到模板的数据:

Student1 Tutorial1 A
Student2 Tutorial1 A+
Student1 Tutorial2 B
Student1 Tutorial3 A
{'Student1': {'Tutorial1': 'A', 'Tutorial1': 'A'}, 'Student2': {'Tutorial2': 'A'}, 'Student3': {'Tutorial1': 'A', 'Tutorial1': 'A'}}
在views.py中使用以下代码

def results(request):
    grades=Grade.objects.filter().values_list('student__name','tutorial__name','grade')
    dic1=defaultdict(list)
    dic2=defaultdict(list)
    for s,t,g in grades:
        if t not in dic1:
            dic1[t]=g
        dic2[s]=dict(dic1)
    return render(request,'results/index.html',{"a":dict(dic2)})
不幸的是,我无法找到使用返回到模板中的数据的逻辑

您可以在模板中执行类似(创建词典后)的操作-

{% for st in a.keys %}
// st is the student name
{{ st }}
{% for tut in a[st].keys %}
// tut is tutorial name and a[st][tut] is the grade
{{ tut }}
{{ a[st][tut] }}
{% endfor %}
{% endfor %}
将它们适当地放在表中。

您可以在模板中执行类似(创建词典后)的操作-

{% for st in a.keys %}
// st is the student name
{{ st }}
{% for tut in a[st].keys %}
// tut is tutorial name and a[st][tut] is the grade
{{ tut }}
{{ a[st][tut] }}
{% endfor %}
{% endfor %}

将它们适当地放在表中。

能否显示您的视图?如果您使用django的内置通用视图,这将更容易实现:。然后,如果需要,您可以覆盖
get\u context\u data
函数。是否可以显示您的视图?如果使用django的内置通用视图,这将更容易实现:。然后,如果需要,您可以覆盖
get\u context\u data
函数。