2011-08-30 268 views
1

讓假設在我看來一些代碼看起來像這樣的頂級定製方法:Django的ORM,在查詢集

bar = Bar.objects.get(pk=1) 
foos = bar.foo_set.filter(VERY_LONG_COMPLEX_FILTERING_LOGIC) 

我顯然要清潔過濾器的方法一點,通過創建一個自定義的方法做同樣的事情,就像這樣:

bar = Bar.objects.get(pk=1) 
foos = bar.foo_set.complexfilter() 

移動定製的方法某處的一類將是完美的,但到目前爲止,我再也找不到像,在文檔的任何任何提及。有什麼建議麼?

預先感謝您。

回答

0

把它放在bar的方法看起來不錯。

+0

好吧,所以我想它會需要包括foo_set調用以及?:def complexfilter(self):return self.foo_set.filter(); bar.complexfilter()。所以它不可能在foo_set屬性上做任何自定義的事情? – murmun

+0

修改foo_set你不得不使用自定義管理器嗎? – Dave

+0

@murmun我不認爲這是可能的,但你真的需要它嗎?或者,您可以爲'Foo'模型創建cusom管理器,並將'bar'作爲參數傳遞給它。 – DrTyrsa