2015-07-01 39 views
0

我有以下型號的結果(簡單的例子當然):Django的ORM - ORDER_BY的選擇上外鍵

class ParentModel(Model): 
    id = IntegerField(primary_key=True) 
    family = OneToOneField(Family) 
    objects = SpecificManagerThatDoesAlotOfQueryLogic() 

class Family(Model): 
    id =IntegerField(primary_key=True) 

class Child(Model): 
    family = ForeignKey(Family, related_name='children') 
    is_the_relevent_child = BooleanField(default=False) #Only one Child would have this a s 
    score_to_sort_by = DecimalField()  

哪裏需要返回的ParentModel一個queryset(是的,我需要這是一個queryset,所以後面會發生的分頁等不會中斷),這是family__children__score_to_sort_by使用is_the_relevent_child標誌來選擇我訂購的子項。

我知道,如果孩子已經到家庭OneToOne關係,我可以與:

ParentModel.objects.filter(**{something:something}).order_by('family__child__score_to_sort_by')

我知道這個造型是不太適合這樣做,但我需要它等原因,使我需要讓查詢集工作 我懷疑註解可以幫助我,但我無法弄清楚(或者如果有人能指出我使用了一些額外的SQL,我也可以處理這些,如果不是太複雜的話) ,我們正在使用django 1.6 任何想法?謝謝..

回答

1

family__children__score_to_sort_by是ParentModel上任何查詢的查詢行中定義良好的列。所以,你可以在is_the_relevant_child過濾器直接,就像這樣:

ParentModel.objects.filter(...) 
    .filter(family__children__is_the_relevant_child=True) 
    .order_by('family__children__score_to_sort_by') 

只有相關的孩子應該在這個順序來考慮。

+0

看起來合法,我會嘗試 – alonisser