2011-08-30 221 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