将queryset转换为dicts django的dict

时间:2013-05-30 11:10:14

标签: django python-3.x django-views django-queryset

我正在尝试用数据制作一个dicts的字典并将其传递给模板。

models.py

 class Lesson(models.Model):
 ...

 class Files(models.Model):
 ...

 class Section(models.Model):
   file = models.ManyToManyField(Files)
   lesson = models.ForeignKey(Lesson)

views.py

def LessonView(request):
    the_data={}
    all_lessons= Lesson.objects.all()
    for lesson in all_lessons:
        the_data[lesson]=lesson.section_set.all()
        for section in the_data[lesson]:
            the_data[lesson][section]=section.file.all() <---error
    Context={
        'the_data':the_data,
        }
return render(request, 'TMS/lessons.html', Context)

我收到错误:

 Exception Value:   

 'QuerySet' object does not support item assignment

我是django和编程的新手,所以请放轻松。这是传递数据的正确方法,这样我就可以在模板中显示每节课的每个部分的文件列表?

1 个答案:

答案 0 :(得分:2)

您无需转换为dicts的dict即可传递给模板。您可以直接遍历查询集,对于每个查询集,您可以获取相关的部分和文件:

{% for lesson in all_lessons %}
    {{ lesson.name }}
    {% for section in lesson.section_set.all %}
        {{ section.name }}
        {% for file in section.file.all %}
            {{ file.name }}
        {% endfor %}
    {% endfor %}
{% endfor %}

请注意,这(就像您原来的方法一样)在数据库查询方面非常昂贵:您应该在视图中使用prefetch_related进行调查,以减少这些问题。