Фильтры пользовательского набора запросов Django
-
21-08-2019 - |
Вопрос
Есть ли в Django стандартный способ написания сложных пользовательских фильтров для наборов запросов?
Так же, как я могу написать
MyClass.objects.all().filter(field=val)
Я хотел бы сделать что-то вроде этого:
MyClass.objects.all().filter(customFilter)
Я мог бы использовать выражение-генератор
(x for x in MyClass.objects.all() if customFilter(x))
но это приведет к потере возможности цепочки и любых других функций, предоставляемых QuerySets.
Решение
Я думаю, вам может понадобиться индивидуальный менеджеры.
Другие советы
Рекомендация начать использовать методы менеджера - хорошая, но если ответить на ваш вопрос более прямо:да, используй Q объекты.Например:
from django.db.models import Q
complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)
MyModel.objects.filter(complexQuery)
Q Объекты могут быть объединены с | (Или), & (и), и ~ (нет).
Не связан с StackOverflow