2011-07-06 51 views
0

大家。Django QuerySet的方式從sql表中選擇功能

我使用Django 1.3和Postgres 9.0。我有非常複雜的SQL查詢,它擴展簡單的模型表查找與一些額外的領域。它被包裝在表格函數中,因爲它被參數化。
一個月之前,我設法使原始查詢的幫助下工作,但RawQuerySet缺乏很多我真正需要的功能(過濾器,count()和clone()方法,可鏈接性)。
這個想法看起來很簡單。查詢集讓我來執行此查詢:而我需要做這個

SELECT "table"."field1", ... ,"table"."fieldN" FROM "table" 

SELECT "table"."field1", ... ,"table"."fieldN" FROM proxy(param1, param2) 

因此問題是:我怎樣才能做到這一點?我已經開始創建自定義管理器,但不能將model.db_table替換爲自定義字符串(因爲它被引用並且數據庫停止以識別函數調用)。
如果沒有辦法用函數替換表我想知道我是否可以從RawQuerySet創建QuerySet(不是最乾淨的解決方案,但簡單的RawQuerySet給...一個身體部分帶來如此多的痛苦)。

回答

1

如果你的要求是,要使用原始SQL出於效率的目的,仍然可以訪問建模方法,你真正需要的是什麼映射的SQL領域是什麼型號的列庫。

那個庫是,Unjoinify

+0

是的,好的。這看起來很簡單,但我沒有問題將sql輸出映射到模型實例。我需要的是在RawQuerySet中具有QuerySet功能。我發現了一些我可以使用的東西:[如何像查詢集一樣嘎嘎](http://ramenlabs.com/2010/12/08/how-to-quack-like-a-queryset/)。有關這種技術的任何意見? – gorodechnyj

+0

有趣。但是,如果你正在編寫自定義SQL,爲什麼要使用過濾器並排除?什麼是用例? –

+0

假設我有一些商品,並且這些商品正在很多商店出售。在我的功能我計算最好的報價,以最少的價格提供等等......所有這些數據,我可以在一個SQL這是不是讓每個產品10個額外的數據庫調用後,我得到的產品列表更快得到。 而且還是這僅僅是一個產品列表,這樣我就可以讓.filter(manufacturer_id__in = [13,3564]),並應用了一些過濾器。 – gorodechnyj