Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

2.7 Поисковые поля
5 из 5 шагов пройдено

startswith / istartswith

Иногда вам нужно проверить, начинается ли строка с подстроки. Например, вы можете найти сотрудников, чье имя начинается с "J".

Чтобы сделать это в SQL, вы используете LIKE оператор:

SELECT * 
FROM hr_employee
WHERE first_name LIKE 'J%';

Это % подстановочный знак, который соответствует любому количеству символов. И 'J%' соответствует строкам, которые начинаются с J и за которыми следует ноль или более символов.

Чтобы запросить данные из Django с помощью LIKE оператора, вы добавляете startswith его к имени поля:

field_name__startswith

Например, следующий метод использует этот filter() метод для поиска сотрудников, чьи имена начинаются с J:

Employee.objects.filter(first_name__startswith='J') 

Если вы хотите найти сотрудников, чьи имена начинаются с J регистра без учета регистра, вы можете использовать istartswith:

Employee.objects.filter(first_name__istartswith='j')

В этом случае __istartswith для сопоставления используется версия значения в верхнем регистре.

 

endswith/iendswith

Оператор endswith и iendswith возвращает QuerySet, если значение заканчивается подстрокой. Эквивалентен endswith следующему LIKE оператору:

LIKE '%substring'

Например, в следующем примере endswith для поиска сотрудников, чьи имена заканчиваются на ne:

Employee.objects.filter(first_name__endswith='ne')

Метод iendswith, это нечувствительная к регистру версия метода endswith. Например:

Employee.objects.filter(first_name__iendswith='LL')

 

range()

В SQL вы используете оператор BETWEEN, чтобы проверить, находится ли значение между двумя значениями:

field_name BETWEEN low_value AND high_value

В Django эквивалентом оператора BETWEEN является фильтрация через следующий метод:

Entity.objects.filter(field_name__range=(low_value,high_value))

Например, вы можете найти сотрудников с id от 2 до 4, используя следующий диапазон:

Employee.objects.filter(id__range=(2,4))

За кулисами Django выполняет следующий запрос:

Мы также можем использовать данный метод и с датами, например следующий запрос выведет всех сотрудников, которые были созданы в период между двух дат.

Employee.objects.filter(created__range=('2021-12-12', '2023-12-12')) 


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.