Django高效的一对多链查找

时间:2018-12-18 14:17:21

标签: python django django-models

我具有以下数据结构:

class File(models.Model):
    dataset = models.ForeignKey(Dataset)

class Dataset(models.Model):
    mission = models.ForeignKey(Mission)

class Mission(models.Model):
    project = models.ForeignKey(Project)

class Project(models.Model):
    pass

我想有效地确定一个Project是否包含任何文件。从单个Project对象开始,如何获取所有相关文件的列表?

我知道project.mission_set.all()会让我进入第一层,但是我不知道如何有效地链接查询。

1 个答案:

答案 0 :(得分:3)

如果您想知道哪些Files实例与my_project实例相关,则可以按以下方式访问它:

my_project = Project.objects.create()

File.objects.filter(dataset__mission__project=my_project)

为了知道您可以做的数量:

File.objects.filter(dataset__mission__project=project).count()