Фильтры Django Custom Queryset - PullRequest
       23

Фильтры Django Custom Queryset

7 голосов
/ 23 марта 2009

Существует ли в Django стандартный способ написания сложных пользовательских фильтров для QuerySets?

Так же, как я могу написать

MyClass.objects.all().filter(field=val)

Я бы хотел сделать что-то вроде этого:

MyClass.objects.all().filter(customFilter)

Я мог бы использовать выражение генератора

(x for x in MyClass.objects.all() if customFilter(x))

но это приведет к потере возможности цепочки и любых других функций, предоставляемых QuerySets.

Ответы [ 2 ]

14 голосов
/ 23 марта 2009

Хорошая рекомендация начать использовать методы менеджера, но чтобы ответить на ваш вопрос более прямо: да, используйте Q объектов . Например:

from django.db.models import Q

complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)

MyModel.objects.filter(complexQuery)

Q объектов можно комбинировать с | (ИЛИ), & (И) и ~ (НЕ).

5 голосов
/ 23 марта 2009

Думаю, вам могут понадобиться менеджеры .

...