замените пробелы на% в приложении django или python - PullRequest
2 голосов
/ 15 октября 2019

мне трудно исправить это. У меня есть функция поиска, которая будет искать название кампании или название запуска кампании. например, если пользователь ищет все кампании, запущенные Джоном Доу. Я хочу заключить все пробелы с ожидаемым '%' (% john% doe%).

campaigns = Campaign.objects.filter(title(re.sub('/\s/g ', '%', search)) | launcher(re.sub('/\s/g ', '%', search)))

Я также пытался

campaigns = Campaign.objects.filter(title(re.sub(' ', '%', search)) | launcher(re.sub(' ', '%', search)))

, но мой код не работает правильно. я получаю

`camp`.`name` LIKE '%john doe%' OR `user`.`name` LIKE '%john doe%'

и если я выполняю search.replace ("", "%") я получаю

`camp`.`name` LIKE '%john\\%doe%' OR `user`.`name` LIKE '%john\\%doe%'

я также получаю эту подфункцию

def search_campaign(request, search):

def title(search):
    return Q(name__icontains=search)
def launcher(search):
    return Q(created_by_name__icontains=search)

любая помощь будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Если вы хотите отправить запрос с %, тогда просто ниже будет работать cod.

>>> import re
>>> re.sub(" ", "%", " jhon doe ")
'%jhon%doe%'

Если вы хотите отправить title как %john%doe% для "john doe", тогдаэтот запрос должен работать.

campaigns = Campaign.objects.filter(title(re.sub(' ', '%', search)) | launcher(re.sub(' ', '%', search)))

Поправьте меня, если я что-то не так понял в вопросе.

0 голосов
/ 15 октября 2019

"Regex" в python ставит пробелы между словами, начинающимися с заглавных букв. для этого сначала вам нужно импортировать "re"

import re
def space(input):
 i1=re.findall("[a-z][A-Z]*",input)
 result=[]
 for word in i1:
  word=chr(ord(word[])+32)+word[1:]
  result.append(word)
  print(' '.join(result))
if __name__=="__main__":
 input="JohnDoe"
 space(input)
0 голосов
/ 15 октября 2019

search.replace ("", "%") должен работать для ввода input = "john doe"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...