将相关对象放入单个查询集中?
Get related objects into a single queryset?
我有 3 个模型。 Module
、Task
和 Lesson
。 Lesson
通过 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 %}
我有 3 个模型。 Module
、Task
和 Lesson
。 Lesson
通过 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 %}