В 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, позволяя нам точно определить требуемые условия фильтрации и выбрать только необходимые объекты.