将相关对象放入单个查询集中?

Get related objects into a single queryset?

我有 3 个模型。 ModuleTaskLessonLesson 通过 FK 与 Module 相关。 Task 通过 FK 连接到 Lesson。我正在尝试在特定模块的单个查询集中获取所有课程和任务。

class Module(models.Model):
    name = models.CharField(max_length=255)

class Lesson(models.Model):
    name = models.CharField(max_length=255)
    module = models.ForeignKey('module', on_delete=models.CASCADE)

class Task(models.Model):
    name = models.CharField(max_length=255)
    lesson = models.ForeignKey('lesson', on_delete=models.CASCADE)

我想在单个查询集中获取模块的所有相关课程以及与其相关的任务。

这是我试过的

module = Module.objects.get(id=57)
lessons = Lesson.objects.filter(module=module)
tasks = Task.objects.filter(lesson__id__in=[lesson.id for lesson in lessons])

好的,所以我完成了 documentation,显然我不需要创建一个单独的对象来保存课程和所有任务,因为 lessons = Lesson.objects.filter(module=module) 已经有 tasks,它可以可以用这样的东西访问

for lesson in lessons:
    print(lesson.task_set.all())

或者像这样在 jinja2 模板中

{% for task in lessons.task.all %}
    {{ lesson }}
{% endfor %}