Является ли поле модели django lookup_type «содержащим» чувствительным к регистру или нечувствительным?

Согласно документации, поиск поля «содержит» чувствителен к регистру, а «значок» нечувствителен к регистру, но я не вижу никакой разницы, когда запрашиваю его.

>>> from users.models import SnetUser
>>> SnetUser.objects.get(email__contains='Satti')
<SnetUser: satti>
>>> SnetUser.objects.get(email__contains='satti')
<SnetUser: satti>
>>> obj = SnetUser.objects.get(email__contains='satti')
>>> obj.email
'[email protected]'

Оба результата одинаковы.

Примечание. Я использую базу данных django SQLite локально.


person ivardu    schedule 13.05.2020    source источник


Ответы (1)


Этот случай описан в документах.

Поиск поля contains преобразуется в предложение LIKE, а в SQLite он нечувствителен к регистру.

Если вы хотите, чтобы предложение LIKE работало с учетом регистра, вам необходимо использовать следующее PRAGMA:

PRAGMA case_sensitive_like = true;

>>> from django.db import connection

>>> with connection.cursor() as cursor:
...     cursor.execute('PRAGMA case_sensitive_like = true;')

>>> SnetUser.objects.get(email__contains='Satti')
<QuerySet []>
person Davit Tovmasyan    schedule 13.05.2020