gt, gte, lt, lte
В Django для выполнения сравнений в запросах к базе данных используются следующие фильтры набора запросов:
gt(больше чем): Этот фильтр выбирает объекты, в которых указанное поле больше заданного значения. Например:Worker.objects.filter(age__gt=35)Этот запрос извлечет всех сотрудников, возраст которых (поле
age) больше 35.lt(меньше чем): этот фильтр выбирает объекты, в которых указанное поле меньше заданного значения. Например:Worker.objects.filter(age__lt=30)Этот запрос извлечет всех сотрудников, возраст которых (поле
age) меньше 30.gte(больше или равно): этот фильтр выбирает объекты, в которых указанное поле больше или равно заданному значению. Например:Worker.objects.filter(age__gte=34)Этот запрос извлечет всех сотрудников, возраст которых (поле
age) больше или равно 34.lte(меньше или равно): Этот фильтр выбирает объекты, в которых указанное поле меньше или равно заданному значению. Например:Worker.objects.filter(age__lte=31)Этот запрос извлечет всех сотрудников, возраст которых (поле
age) меньше или равно 31.
startswith / istartswith
Иногда вам нужно проверить, начинается ли строка с подстроки. Например, вы можете найти сотрудников, чье имя начинается с "J".
Чтобы сделать это в SQL, вы используете LIKE оператор:
SELECT *
FROM hr_employee
WHERE first_name LIKE 'J%';
Это % подстановочный знак, который соответствует любому количеству символов. И 'J%' соответствует строкам, которые начинаются с J и за которыми следует ноль или более символов.
Чтобы запросить данные из Django с помощью LIKE оператора, вы добавляете startswith к имени поля:
field_name__startswith
Например, следующий метод использует этот filter() метод для поиска сотрудников, чьи имена начинаются с J:
Worker.objects.filter(first_name__startswith='J')
Если вы хотите найти сотрудников, чьи имена начинаются с J регистра без учета регистра, вы можете использовать istartswith:
Worker.objects.filter(first_name__istartswith='j')
В этом случае __istartswith для сопоставления используется версия значения в верхнем регистре.
endswith/iendswith
Оператор endswith и iendswith возвращает QuerySet, если значение заканчивается подстрокой. Эквивалентен endswith следующему LIKE оператору:
LIKE '%substring'
Например, в следующем примере endswith для поиска сотрудников, чьи имена заканчиваются на en:
Worker.objects.filter(first_name__endswith='en')
Метод iendswith, это нечувствительная к регистру версия метода endswith. Например:
Worker.objects.filter(first_name__iendswith='EN')
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, используя следующий диапазон:
Worker.objects.filter(id__range=(2,4))
За кулисами Django выполняет следующий запрос:
Мы также можем использовать данный метод и с датами, например следующий запрос выведет всех сотрудников, которые были созданы в период между двух дат.
Worker.objects.filter(created__range=('2021-12-12', '2023-12-12'))