Лукап exact

Лукап exact применяется к полям модели в запросах filter, exclude и других методах QuerySet для выполнения точного сравнения. Он используется по умолчанию, если в запросе не указан другой оператор поиска. В качестве аргумента принимает значение, с которым сравнивается поле.

Синтаксис

pythonModel.objects.filter(field__exact=value)

Альтернативный синтаксис без явного указания exact:

pythonModel.objects.filter(field=value)

Пример . С явным указанием exact

Давайте найдём всех пользователей с именем "John", используя явное указание лукапа:

pythonfrom myapp.models import User

users = User.objects.filter(name__exact="John")
res = users.values("name", "age")
for user in res:
  print(user)

Результат выполнения кода:

python{'name': 'John', 'age': 30}
{'name': 'John', 'age': 25}

Пример . Без указания exact

Поскольку exact используется по умолчанию, можно записать запрос короче:

pythonfrom myapp.models import User

users = User.objects.filter(name="John")
res = users.values("name", "age")
for user in res:
  print(user)

Результат выполнения кода:

python{'name': 'John', 'age': 30}
{'name': 'John', 'age': 25}

Пример . С учётом регистра

Лукап exact чувствителен к регистру для строковых полей. Давайте найдём пользователя с именем "john" в нижнем регистре:

pythonfrom myapp.models import User

users = User.objects.filter(name__exact="john")
res = users.values("name", "age")
for user in res:
  print(user)

Результат выполнения кода:

python{'name': 'john', 'age': 35}

Пример . Для числовых полей

Для числовых полей exact работает аналогично, сравнивая значения на точное равенство:

pythonfrom myapp.models import Product

products = Product.objects.filter(price__exact=99.99)
res = products.values("name", "price")
for product in res:
  print(product)

Результат выполнения кода:

python{'name': 'Keyboard', 'price': 99.99}

Смотрите также

  • лукап iexact,
    который выполняет сравнение без учёта регистра
  • лукап contains,
    который проверяет вхождение подстроки
  • лукап icontains,
    который проверяет вхождение подстроки без учёта регистра
  • лукап startswith,
    который проверяет начало строки