2015-12-29 123 views
1

首先,讓我現在的模式會更容易解釋我的問題Django的 - 在單個查詢限制外鍵查詢集

Class A: 
    points = Int 

Class B: 
    fk = ForignKey(A) 

讓我們假設,我們有很多A和B的對象

top_a = A.objects.all().order_by("points")[:3] 
result = B.objects.filter(fk__in=list(top_a)) 

是有可能得到與上述相同的結果,但在1個單一的查詢中做到這一點?結果將是所有這一切都來自前3

+2

,我不認爲這是可能做到這一點在一個查詢中,至少從sql查詢的角度來看,因爲總是需要一個單獨的查詢來查詢前3個記錄的'A'。 –

回答

0

FK到A的B的實例是的,你可以這樣做:

result = B.objects.all().order_by('fk__points')[:3] 
+0

這個結果會給我3個B的實例;)不是B的所有實例都有fk到A的前3個之一 – Arturo