В Django lookup - это способ фильтрации данных в запросах к базе данных с использованием специальных операторов. Они позволяют более гибко и точно определить условия фильтрации.
Django предоставляет множество встроенных lookup'ов для работы с различными типами полей и операций. Вот некоторые из них:
1. exact
: это оператор по умолчанию и используется для точного сравнения значений поля. Например, Model.objects.filter(id__exact=1)
вернет объекты модели, у которых значение поля id
равно 1.
2. iexact
: этот оператор выполняет регистронезависимое сравнение значений поля. Например, Model.objects.filter(name__iexact='john')
вернет объекты модели, у которых значение поля name
равно 'john' независимо от регистра.
3. contains
: этот оператор выполняет поиск подстроки в значении поля. Например, Model.objects.filter(name__contains='doe')
вернет объекты модели, у которых значение поля name
содержит подстроку 'doe'.
4. icontains
: это регистронезависимая версия оператора contains
. Например, Model.objects.filter(name__icontains='john')
вернет объекты модели, у которых значение поля name
содержит подстроку 'john' независимо от регистра.
5. in
: этот оператор выполняет проверку на вхождение значения поля в указанном списке. Например, Model.objects.filter(id__in=[1, 2, 3])
вернет объекты модели, у которых значение поля id
равно 1, 2 или 3.
6. gt
, gte
, lt
, lte
: эти операторы выполняют сравнение полей с указанными значениями, использовать можно для числовых и дата-полей. Например, Model.objects.filter(age__gt=18)
вернет объекты модели, у которых значение поля age
больше 18.
7. startswith
, istartswith
, endswith
, iendswith
: эти операторы выполняют проверку на начало и конец строки. Например, Model.objects.filter(name__startswith='j')
вернет объекты модели, у которых значение поля name
начинается с буквы 'j'.
Это лишь некоторые из доступных lookup'ов в Django. Вы можете комбинировать их для создания более сложных условий фильтрации. Например, Model.objects.filter(name__icontains='john', age__gte=18)
вернет объекты модели, у которых значение поля name
содержит подстроку 'john' и значение поля age
больше или равно 18.
Также в Django можно создавать собственные lookup'ы для пользовательских типов полей или определенных моделей. Это делается с помощью наследования от класса django.db.models.Lookup
и создания метода as_sql
для преобразования lookup'а в SQL-запрос.
В заключение можно сказать, что lookup'ы являются мощным инструментом для фильтрации данных в Django, позволяя нам точно определить требуемые условия фильтрации и выбрать только необходимые объекты.