2012-06-25 93 views
1

因此,以前也有类似的问题,但我一直无法找到确凿的答案。Django - reverse foreignkey select_related

鉴于以下型号:

class Parent(models.Model): 
    name = models.CharField(max_length=250) 

class ChildA(models.Model): 
    parent = models.ForeignKey('Parent') 

class ChildB(models.Model): 
    parent = models.ForeignKey('Parent') 

我怎样才能得到一个给定的父母所有的孩子?选择相关只会前进,所以这将无法工作,据我所知。预取相关似乎只在父级中存在实际的字段引用时才起作用(即,如果父级具有带有子级的字段是m2m),所以我不明白这是如何工作的。

我敢肯定,这是我刚才在文档中忽略的部分,因为这类问题是如此简陋和普遍。

回答

3

这与select_relatedprefetch_related无关。要获得父母的所有孩子与你的结构,你总是需要做两个查询:

my_children = list(my_parent.childa_set.all()) + list(my_parent.childb_set.all()) 
+0

因此,对于N个孩子,我总是需要至少N个查询?好。什么是您使用的parent.childa_set语法? – guywhoneedsahand

+0

https://docs.djangoproject.com/en/1.4/topics/db/queries/#following-relationships-backward –

+0

啊,太棒了,谢谢。所以它基本上是Child.objects.filter(parent = myparent)的缩写, – guywhoneedsahand