多个ModelManager过滤方法

时间:2010-10-24 04:46:34

标签: python django django-models

def by_this(self):
        return super(MyModelManager, self).get_query_set().filter(this=True)

def by_that(self):
        return super(MyModelManager, self).get_query_set().filter(that=True)

如果我做了MyModel.objects.by_this()或by_that(),它就可以了。

但我想这样做: MyModel.objects.by_this()。by_that()

3 个答案:

答案 0 :(得分:1)

正如其他人所说,您需要自定义QuerySet。以下是如何执行此操作的一些示例:

http://djangosnippets.org/snippets/562/
http://adam.gomaa.us/blog/2009/feb/16/subclassing-django-querysets/index.html

答案 1 :(得分:0)

MyModel.objects将返回您的ModelManager类型,但by_this会返回一个查询集。因此,您无法在返回的对象上调用by_that,并且链接不起作用。你可以这样做:MyModel.objects.by_this().filter(that=True)。或者只在ModelManager派生类中定义by_this_and_that方法。

答案 2 :(得分:0)

正如ars所说,您的方法返回一个查询集。所以你需要做的是创建一个QuerySet的自定义子类,它包含by_thisby_that方法,然后在MyModelManager.get_query_set中返回你的子类查询集。