Я имею некий класс Person
и создаю некое "условие" примерно так:
условие = Person.select().where(
#fn.Lower(Person.имя).contains(text.lower()) | #кстати эта строчка не работает....
Person.имя.contains(text) |
Person.доп_имя.contains(text) |
Person.тип.contains(text)
).order_by(Person.тип)
Где text - заранее введённый в lineEdit строчку текст
И пытаюсь совершить по нему поиск.
for pers in условие - всё работает.
Но вот допустим я хочу поискать не по одному слову а по нескольким словам сразу.
Я разделяю текст text используя text.split(" ")
и далее если например получается 2 слова :
if len(разделил_текст_поиска) == 2:
условие = Detal.select().where\
(
(
Personl.имя.contains(разделил_текст_поиска[0]) |
Person.доп_имя.contains(разделил_текст_поиска[0]) |
Person.тип.contains(разделил_текст_поиска[0])
) & (
Person.имя.contains(разделил_текст_поиска[1]) |
Person.доп_имя.contains(разделил_текст_поиска[1]) |
Person.тип.contains(разделил_текст_поиска[1])
)
).order_by(Person.тип)
ищу одно и тоже условие для каждого слова.
для 2-х слов условие возрастает двухкратно.
Для 3-х слов условие возрастёт траекратно.
Очевидно что тут возможно применить какие нибудь циклы. но я не знаю как правильно это делать...(да книжку проглядывал и даже немного читал буду рад если кто нибудь просто ткнёт носом какую главу в какой книжке прочесть. (только русскую.))
И буду очень рад если кто нибудь напишет как правильно применять fn.Lower - потому что у меня это сработало только дин раз с одной базой - а когда я создал в ней ещё 1 класс и просто скопировал - она уже перестала работать :( Возможно просто есть какой нибудь мало-упоминаемый подводный камень - которого я не вижу...
to
Anton Kuzmichev:
насчёт fn lower: именно этот пример у меня сработал как минимум 1 раз. Но сейчас даже при простом тупом копировании оно не работает. И почему то везде предлагают его в связке с substr который мне по сути не нужен.
насчёт кортежей: Спасибо вам большое уменьшил код до
разделил_текст_поиска = text.split(" ")
filtr = True
for i in разделил_текст_поиска:
filtr &= \
(
Person.имя.contains(i) |
Person.доп_имя.contains(i) |
Person.тип.contains(i])
)
условие = Person.select().where(filtr)
Теперь запрос может быть из любого количества слов. СПАСИБО!