Вопрос

Есть ли в 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 Объекты могут быть объединены с | (Или), & (и), и ~ (нет).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top