кваргиарги
Иногда приходится выполнять запросы по нескольким условиям из одной таблицы. Как пример выборка какой нибудь статьи сначала по названию, потом по дате. В принципе такое будет выглядеть таким образом
-
try:
-
if not objects:
-
objects = search_for(h_date__day = param)
-
except:
-
objects = []
-
-
try:
-
if not objects:
-
objects = search_for(h_date__month = 11)
-
except:
-
objects = []
Попробуем с этим что то сделать =) Для этого вспомним что такое kwargs и args и насколько полезными они часто бывают.
-
objects = search_for(title__icontains = param)
-
-
if not objects:
-
objects = search_for(h_date__day = param)
-
-
if not objects:
-
objects = search_for(h_date__month = month)
Как видно я вынес одинаковую часть в отдельный метод. Посмотрим что делает этот метод:
-
def search_for(*args, **kwargs):
-
try:
-
objects = MyModelObject.objects.filter(*args, **kwargs)
-
except:
-
objects = []
-
return objects
Ничего сверхъестественного, верно? А можно унифицировать метод и использовать его где захочется для простой фильтрации.
-
def filter_for(model, *args, **kwargs):
-
try:
-
objects = model.objects.filter(*args, **kwargs)
-
except:
-
objects = []
-
return objects
-
-
-
def func(request, param):
-
filter_for(MyModel, title_icontains = param)
