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()
答案 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_this
和by_that
方法,然后在MyModelManager.get_query_set
中返回你的子类查询集。