2010-03-10 83 views
2

对于以下机型:Django的查询与相关模型

class Customer(models.Model): 
    id = models.IntegerField(primary_key=True) 

class OrderA(models.Model): 
    name = models.CharField(max_length=20) 
    foo = models.FloatField() 
    customer = models.ForeignKey(Customer) 
    type = models.IntegerField() 

class OrderB(models.Model): 
    name = models.CharField(max_length=20) 
    customer = models.ForeignKey(Customer) 
    type = models.IntegerField() 

我想抓住所有一气呵成及其相关OrderA和OrderB对象的客户对象的条件(其中OrderA和OrderB类型等于1 )

回答

0

您在伊格纳西奥您的评论说得对,select_related作品在T他反方向。

我已经写了一个关于在这个方向上做的技巧on my blog(抱歉,关于插件)。

+1

这就是为什么你不应该用链接回答......因为现在链接不起作用,因此答案不是有用的 – Christoffer 2013-08-06 14:45:37

+0

好吧,问题似乎与我的博客的DNS,而不是链接本身。但是这个解决方案现在已经过时了另一个原因,那就是你现在应该使用'prefetch_related'。 – 2013-08-06 14:57:07

2

select_related()将预填充相应的属性:

Customer.objects.filter(ordera_set__type=1, orderb_set__type=1).select_related() 
+0

你确定select_related在这个方向工作吗?在我的理解中,如果您在OrderA或OrderB对象上调用它,那么它将填充所有相关的Customer对象。 – Vishal 2010-03-10 22:32:30

+0

是否与以下内容相同:'Customer.objects.select_related('ordera','orderb')。filter(ordera_set__type = 1,orderb_set__type = 1)' – 2013-12-11 12:33:37