2012-12-10 84 views
1

我有一個名爲A的樹狀Django模型,它由django-mptt完成。爲查詢集中的每個實例獲取FK集

class A(MPTTModel): 
    parent = TreeForeignKey('self') 

這類全自動有「孩子」經理,這樣我就可以輕鬆搞定的子樹

還有另一種模式,它有FK鏈接到:

class SomeModel(models.Model): 
    link_to_a = models.ForeignKey(A) 

我知道,如果我想要得到SomeModel設置一個實例,我可以這樣做:

a = A.objects.filter(blah) 
a.somemodel_set.all() 

問題是: 什麼是下一個模型來獲取somemodel_set每個實例的一些queryset的最Python的方式,即我想4例如這樣的:

some_A_instance.children.all().get_all_somemodel_instances() 

和get_all_somemodel_instances()應檢索套ziped queryset的每個孩子

回答

0

這應該做到:

[child.somemodel_set.all() for child in some_A_instance.children.all()] 
+0

輸出爲列表,我需要懶惰的物體,像查詢集 –

+0

輸出是QuerySet的對象的列表。 – borges

1

你只需要在一個列表中的相關項目,或者你需要關聯的每個設置與他們的父母?如果前者,你可以一次得到它們:

related_items = SomeModel.objects.filter(link_to_a=some_A_instance.children.all()) 

這將做一個單一的查詢(與子查詢)來獲取一切。

否則,您可以使用prefetch_related()獲得所有項目相關集一氣呵成:

items = some_A_instance.children.all().prefetch_related('somemodel_set')