Несколько методов фильтра ModelManager - PullRequest
1 голос
/ 24 октября 2010
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 ]

1 голос
/ 24 октября 2010

Как говорят другие, вам нужен собственный QuerySet. Вот несколько примеров того, как это сделать:

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

0 голосов
/ 24 октября 2010

Как говорит ars, ваши методы возвращают набор запросов.Итак, вам нужно создать собственный подкласс QuerySet, который содержит методы by_this и by_that, а затем в MyModelManager.get_query_set вернуть ваш подклассовый набор запросов.

0 голосов
/ 24 октября 2010

MyModel.objects вернет ваш тип ModelManager, но by_this вернет набор запросов. Таким образом, вы не можете вызвать by_that для возвращенного объекта, и цепочка не работает. Вы можете сделать: MyModel.objects.by_this().filter(that=True). Или просто определите метод by_this_and_that в своем производном классе ModelManager.

...