#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
? Надеюсь, вы поняли это 🙂