Django如何在一对多关系中获得具有复杂连接的特定字段

时间:2015-04-26 18:53:34

标签: django get one-to-many

我有一个由3个表组成的数据库

  • 项目表
  • 节表
  • 任务表

他们的关系

  • 项目表与Section表有一对多关系。
  • 节表与任务表具有一对多关系。

我已经通过此代码

查询了目标任务记录
 task = tasks.objects.filter(section_id=sectionID)

假设我有sectionID然后我想从任务对象获取project.id,我该怎么办?

谢谢。

2 个答案:

答案 0 :(得分:1)

我猜你的模特看起来像那样:

class Project(models.Model):
    #...


class Section(models.Model):
    #...
    project = models.ForeignKey(Project)


class Task(models.Model):
    #...
    section = models.ForeignKey(Section)

因此,为了获得任务project,您只需要遵循这种关系。

#when task is a single task object
project = task.section.project

请注意,这会产生2个查询(一个获取section,另一个获得project您可以使用select_related进行优化

tasks = Task.objects.filter(section_id=sectionID).select_related('section__project')
for task in tasks:
    project = task.section.project
    print project.id

以单个查询结尾。

我想您也想知道如何获得某些queryset所包含的projects sectionID,在这种情况下,您可以使用反向关系,如下所示:

projects = Project.objects.filter(section__id=sectionID)

答案 1 :(得分:0)

您可以使用task.section.project.id

与其联系