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_

Вернуться на верх