Django table.objects.filter(__icontain) возвращает неверные данные (иногда)
Несколько дней назад я запустил Django (Django 3.2.9) для личного проекта с sqlite3.
У меня есть таблица с 10000+ записей о карте, с определенным id_card, названием, описанием... Я сделал страницы для перечисления и поиска карт, но проблема возникла с поисковым "движком" :
Мой поиск осуществляется с помощью запроса в URL (с именем 'query'), но у меня возникла та же проблема, если я использую данные из поста. Мой views.py выглядит следующим образом :
def search(request):
query = request.GET.get('query')
if not query:
all_cards= Cards.objects.all()
context = {
'card_list': all_cards,
'paginate': True,
}
return render(request, 'collection/search.html', context)
else:
# title contains the query is and query is not sensitive to case.
spe_cards = Cards.objects.filter(name__icontains=query).order_by('-type_card')
if not spe_cards .exists():
spe_cards = Cards.objects.filter(name_en__icontains=query)
else:
spe_cards = Cards.objects.filter(desc__icontains=query)
title = "Résultats pour la requête %s"%query
context = {
'liste_carte': spe_cards,
'title': title,
'paginate': True,
}
Проблема в этой строке spe_cards = Cards.objects.filter(name__icontains=query).order_by('-type_card')
фильтр "__contains" или "__icontains" работает только для нескольких запросов с частичным ответом.
Я беру три поиска с :
- Один запрос правильный со всеми искомыми картами
- Один запрос неправильный с возвратом 0 карт
- Один неправильный запрос с несколькими хорошими картами, но не всеми
Каждый запрос работает в оболочке django, но не в командной строке sqlite, например, этот запрос ( генерируется отладочным приложением) :
SELECT *
FROM "collection_cards"
WHERE "collection_cards"."name" LIKE '''%Fire fist%''' ESCAPE '\'
Возвращает все нужные карточки на моей странице, но не работает в sqlite3. На самом деле у меня 2 разные мысли, одна о кодировке (я француз, éà'ô... везде) и другая о 3 кавычках после LIKE в предыдущей команде
Можете ли вы помочь мне продвинуться в этом вопросе или, возможно, даже найти решение?
Спасибо,
NKO_