Django objects filter

Опубликовано 2021.08.10

Для извлечения из БД списка моделей используется метод модели objects. Далее методом filter можно добавить условия выборки(аналогично where в БД).

Например, выбор всех моделей типа Task, у которых поле size равно 5 и поле approval равно True:

  1. Task.objects.filter(size=5, approval=True)

С этим всё просто. А теперь предположим, что эти фильтры зависят от чего-либо, например от GET-параметров, от пользователя, времени суток или банально страницы сайта. Передать набор фильтров в виде словаря нельзя.

Сработает такой трюк:

  1. filters = {
  2. "size": 5,
  3. "approval": True,
  4. "custom": 10
  5. }
  6. Task.objects.filter(**filters)
Таким образом мы можем динамично менять поля словаря filters и фильтровать так по таблице. Главное в этом словаре фильтры должны совпадать с именами полей модели.