如何在一对多关系层次结构的第二级获取所有相关对象?

时间:2017-08-05 20:40:45

标签: django orm

假设我有三个模型绑定在一对多关系中,如下所示:

class Highest(Model):
    pass


class Medium(Model):
    higher = ForeignKey(Highest, on_delete=CASCADE)


class Lowest(Model):
    higher = ForeignKey(Medium, on_delete_CASCADE)

现在,如果我有一个名为Highest的{​​{1}}实例,我可以通过这种方式轻松获取所有相关highest个对象:Medium

如果我有一个名为highest.medium_set.all() Medium的实例,我可以通过这种方式轻松获取所有相关medium个对象:Lowest

但是如何获取与特定medium.lowest_set.all()对象相关的任何Lowest对象相关的所有Medium个对象?

这不起作用:Highest

我总是可以这样做:highest.medium_set.lowest_set.all()

但这是唯一的方法吗?或者我可以更直接地做到这一点吗?也就是说,通过从Lowest.objects.filter(higher__higher=highest).distinct().all()对象获取所有相关Lowest个对象而不是过滤所有Highest个对象?

1 个答案:

答案 0 :(得分:0)

当您尝试执行highest.medium_set.lowest_set.all()时,您尝试在查询集本身上调用queryset方法。这不会起作用,因为不知道哪个Medium实例要获取所有相关的最低对象。

这应该没问题:

Lowest.objects.filter(higher__higher=highest)