Поиск по запросу. Возвращает список результатов вместо только первой. По префиксной подстроке

#python #django

#python #django

Вопрос:

Я пытаюсь получить все объекты, у которых в качестве подстроки есть поисковое слово, в символе столбца.

если поисковое слово равно G, и существует пять стандартных объектов:

 GOOG
APPL
FLO.CO
GARY
OEGP    
  

Затем я хотел бы получить GOOG и GARY , но не OEGP . Просто префиксная подстрока

Ниже приведен фрагмент кода, который я пробовал. Но это вернет только один объект.

     results = stock.objects.all().filter(symbol=searchWord)

    for x in results:
        print(x.symbol)
  

Ответ №1:

Вы можете использовать startswith with QuerySet.filter() . Ваш запрос ORM должен быть следующим:

 results = stock.objects.all().filter(symbol__startswith=searchWord)
  

При этом будет проверяться наличие префикса с учетом регистра searchWord as для значений в symbol столбце. В случае, если вы хотите сделать без учета регистра префикс проверьте, используйте istartswith вместо этого.

Ответ №2:

Возможно, понимание списка работает для вас (исправлено).

 results = [r for r in results if r.startswith(searchWord)]
  

Комментарии:

1. searchWord in r будет проверяться searchWord как подстрока в r . Лучшим способом будет сделать if r.starswith(searchWord in r): проверку на наличие префикса. Кроме того, понимание списка здесь не требуется, когда вы можете уменьшить нагрузку с filter() самим собой

2. Вы правы. Я не видел, чтобы OP хотел только слова, начинающиеся с searchWord . Я ожидаю, что OP в любом случае захочет получить список в конце.

3. Пожалуйста, извините за опечатку в предыдущем комментарии. Это r.starswith(searchWord) . В ответ на ваш комментарий, зачем это делать, 1 1 1 1 1 1 когда вы можете получить тот же результат с помощью 1*6 ? Надеюсь, вы поняли это 🙂