2010-03-10 85 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