2017-08-05 41 views
0

比方說,我有三個型號在一個一對多的關係必然是這樣的:如何獲取一對多關係層次結構的第二級中的所有相關對象?

class Highest(Model): 
    pass 


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


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

現在,如果我有Highest一個實例調用highest我可以很容易地獲得所有相關Medium對象是這樣的:highest.medium_set.all()

如果我有一個名爲mediumMedium的情況下我可以很容易地獲得所有相關Lowest對象是這樣的:medium.lowest_set.all()

但我怎麼OBTA在與任何Medium對象有關的所有Lowest對象與特定對象Highest有關嗎?

這不起作用:highest.medium_set.lowest_set.all()

我總是可以做到這一點:Lowest.objects.filter(higher__higher=highest).distinct().all()

但是,這是唯一的辦法?或者我可以更直接地做到嗎?也就是說,通過從Highest對象中獲取所有相關的Lowest對象,而不是通過所有的Lowest對象進行篩選?

+2

這是* *是最直接的方式。簡而言之,您應該從您想要獲得的模型開始,即最低。 –

回答

0

當您嘗試執行highest.medium_set.lowest_set.all()時,您試圖在查詢集本身上調用queryset方法。這將無法正常工作,因爲您不知道哪個中等實例需要獲取所有相關的最低對象。

這應該是罰款:

Lowest.objects.filter(higher__higher=highest) 
相關問題