Как использовать сопоставление строковых шаблонов Sqlite из Django?
Если у меня есть CharField
в модели Django, и я пытаюсь отфильтровать ее с помощью строкового шаблона с оператором LIKE
, например:
MyModel.objects.filter(text__like='he_lo')
Django возвращает ошибку:
django.core.exceptions.FieldError: Unsupported lookup 'like' for CharField or join on the field not permitted.
Однако, если я использую manage.py dbshell
для запуска необработанного SQL:
select * from myapp_mymodel where text like 'he_lo';
работает просто отлично.
Почему Django запрещает согласование шаблонов в своем ORM, хотя Sqlite поддерживает его?
Вы можете попробовать raw запрос следующим образом:
objs = MyModel.objects.raw(
"SELECT * FROM myapp_mymodel WHERE text LIKE %s", ['%he_lo']
)
for obj in objs:
# do something