0

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

模型.py

 class Lesson(models.Model):
 ...

 class Files(models.Model):
 ...

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

视图.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 和编程的新手,所以放轻松。这是传递数据的正确方法,以便我可以在模板中显示每节课的每个部分的文件列表吗?

4

1 回答 1

2

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

{% 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在视图中使用以减少这些查询。

于 2013-05-30T12:50:36.223 回答