重塑django queryset以在模板中显示
我正在学习Django,并试图构建一个简单的学生成绩发布系统。我已按如下方式设置了我的模型类:重塑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.
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
函数。