В Django lookup - это способ фильтрации данных в запросах к базе данных с использованием специальных операторов. Они позволяют более гибко и точно определить условия фильтрации.
Django предоставляет множество встроенных lookup'ов для работы с различными типами полей и операций. Вот некоторые из них:
exact
: это оператор по умолчанию и используется для точного сравнения значений поля. Например,Model.objects.filter(id__exact=1)
вернет объекты модели, у которых значение поляid
равно 1.
iexact
: этот оператор выполняет регистронезависимое сравнение значений поля. Например,Model.objects.filter(name__iexact='john')
вернет объекты модели, у которых значение поляname
равно 'john' независимо от регистра.
contains
: этот оператор выполняет поиск подстроки в значении поля. Например,Model.objects.filter(name__contains='doe')
вернет объекты модели, у которых значение поляname
содержит подстроку 'doe'.
icontains
: это регистронезависимая версия оператораcontains
. Например,Model.objects.filter(name__icontains='john')
вернет объекты модели, у которых значение поляname
содержит подстроку 'john' независимо от регистра.
in
: этот оператор выполняет проверку на вхождение значения поля в указанном списке. Например,Model.objects.filter(id__in=[1, 2, 3])
вернет объекты модели, у которых значение поляid
равно 1, 2 или 3.
gt
,gte
,lt
,lte
: эти операторы выполняют сравнение полей с указанными значениями, использовать можно для числовых и дата-полей. Например,Model.objects.filter(age__gt=18)
вернет объекты модели, у которых значение поляage
больше 18.
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, позволяя нам точно определить требуемые условия фильтрации и выбрать только необходимые объекты.