Лукап exact
Лукап exact применяется к полям модели в запросах
filter, exclude и других методах QuerySet
для выполнения точного сравнения. Он используется по умолчанию,
если в запросе не указан другой оператор поиска. В качестве
аргумента принимает значение, с которым сравнивается поле.
Синтаксис
Model.objects.filter(field__exact=value)
Альтернативный синтаксис без явного указания exact:
Model.objects.filter(field=value)
Пример . С явным указанием exact
Давайте найдём всех пользователей с именем "John",
используя явное указание лукапа:
from myapp.models import User
users = User.objects.filter(name__exact="John")
res = users.values("name", "age")
for user in res:
print(user)
Результат выполнения кода:
{'name': 'John', 'age': 30}
{'name': 'John', 'age': 25}
Пример . Без указания exact
Поскольку exact используется по умолчанию,
можно записать запрос короче:
from myapp.models import User
users = User.objects.filter(name="John")
res = users.values("name", "age")
for user in res:
print(user)
Результат выполнения кода:
{'name': 'John', 'age': 30}
{'name': 'John', 'age': 25}
Пример . С учётом регистра
Лукап exact чувствителен к регистру для строковых
полей. Давайте найдём пользователя с именем "john"
в нижнем регистре:
from myapp.models import User
users = User.objects.filter(name__exact="john")
res = users.values("name", "age")
for user in res:
print(user)
Результат выполнения кода:
{'name': 'john', 'age': 35}
Пример . Для числовых полей
Для числовых полей exact работает аналогично,
сравнивая значения на точное равенство:
from myapp.models import Product
products = Product.objects.filter(price__exact=99.99)
res = products.values("name", "price")
for product in res:
print(product)
Результат выполнения кода:
{'name': 'Keyboard', 'price': 99.99}
Смотрите также
-
лукап
iexact,
который выполняет сравнение без учёта регистра -
лукап
contains,
который проверяет вхождение подстроки -
лукап
icontains,
который проверяет вхождение подстроки без учёта регистра -
лукап
startswith,
который проверяет начало строки