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'))