Записи по тегу “kwargs”.

кваргиарги

Иногда приходится выполнять запросы по нескольким условиям из одной таблицы. Как пример выборка какой нибудь статьи сначала по названию, потом по дате. В принципе такое будет выглядеть таким образом

  1. try:
  2.     if not objects:
  3.     objects = search_for(h_date__day = param)
  4. except:
  5.     objects = []
  6.        
  7. try:
  8.     if not objects:
  9.         objects = search_for(h_date__month = 11)
  10. except:
  11.     objects = []

Попробуем с этим что то сделать =) Для этого вспомним что такое kwargs и args и насколько полезными они часто бывают.

  1. objects = search_for(title__icontains = param)
  2.  
  3. if not objects:
  4.     objects = search_for(h_date__day = param)
  5.    
  6. if not objects:
  7.     objects = search_for(h_date__month = month)

Как видно я вынес одинаковую часть в отдельный метод. Посмотрим что делает этот метод:

  1. def search_for(*args, **kwargs):
  2.     try:
  3.         objects = MyModelObject.objects.filter(*args, **kwargs)
  4.     except:
  5.         objects = []
  6.     return objects

Ничего сверхъестественного, верно? А можно унифицировать метод и использовать его где захочется для простой фильтрации.

  1. def filter_for(model, *args, **kwargs):
  2.     try:
  3.         objects = model.objects.filter(*args, **kwargs)
  4.     except:
  5.         objects = []
  6.     return objects
  7.  
  8.  
  9. def func(request, param):
  10.     filter_for(MyModel, title_icontains = param)