2009-08-12 76 views
0

如何做長時間查詢?有沒有辦法優化它? 我會做複雜和長期的查詢:真的很長的查詢

all_accepted_parts = acceptedFragment.objects.filter(fragmentID = fragment.objects.filter(categories = fragmentCategory.objects.filter(id=1))) 

,但它不工作,我得到:

Error binding parameter 0 - probably unsupported type. 

我會感謝任何提示我怎麼能進行優化或太粗的解決 - 更多感謝:)

+0

當然,所有型號的filelds是正確的 – IProblemFactory 2009-08-12 21:45:01

+2

你的主要問題是可能的過濾器()返回一個QuerySet,這實際上是對象的列表。嘗試「categories__in = fragmentCategory ... etc」。像這樣的嵌套查詢幾乎不需要,如果您的模型正確相關。如果您可以自己發佈模型定義,我們可以幫助您優化查詢。 – 2009-08-12 22:01:03

+0

@Jarret哈迪,也許你應該做出答案。 – 2009-08-12 22:05:15

回答

4

如果它不工作,你不能優化它。首先讓它工作。

乍一看,你似乎對領域,關係和平等/成員身份有着複雜的概念。首先去思考文檔,並在python shell上逐個構建您的查詢(可能從內到外)。

只是瞎猜:

all_accepted_parts = acceptedFragment.objects.filter(fragment__in = fragment.objects.filter(categories = fragmentCategory.objects.get(id=1))) 

或可能:

all_accepted_parts = acceptedFragment.objects.filter(fragment__in = fragment.objects.filter(categories = 1)) 
+0

fragmentID__in(...)作品,thx :) – IProblemFactory 2009-08-12 23:02:20

4

正如其他人所說,我們真正需要的車型,和你實際上想一些解釋實現。

但它看起來像你想做一個相關的表查找。而不是在一個單獨的嵌套查詢中獲取所有相關對象,您應該使用Django的相關模型語法在查詢中進行連接。

喜歡的東西:

acceptedFragment.objects.filter(fragment__categories__id = 1) 
+0

哇我不知道那很酷的語法,thx;> – IProblemFactory 2009-08-12 23:01:19