[PostgreSQL + PyQt5 + Python]Сделать фильтрацию товаров (ПОИСК)

loneres

Новичок
Пользователь
Ноя 21, 2021
7
0
1
Здравствуйте, у меня есть программа и внутри есть таблица к которой подключена база данных.
Программа построена на PyQt5(UI), Python(Code), Database(PostgreSQL)

У меня в программе есть фильтры и поиск, поиск должен при вводе него значения отображать найденные результаты он это делает но не совсем.
А так же слева есть фильтры, при выборе к примере Труба-бесшовная в таблице должны отобразиться все бесшовные трубы.

Как можно это сделать? Потому что мой код это делает но не совсем правильно:

При вводе Труба (Screenshot_1) он выдает все товары которые называются труба (Screenshot_2).
Но если я хочу написать Труба бесшовная (Screenshot_3) то он выдает пустую таблицу и не находит (Screenshot_4).
Если писать бесшовная и больше ничего то он выдает все где есть слово бесшовная (Screenshot_5 и Screenshot_6).
Вот если я напишу труба и размер ф105*8 как указано в базе то он не выдает и выдает пустую таблицу. (Screenshot_7 и должен показывать Screenshot_8)

Вот фильтр по той же схеме. Выбираешь Труба он выдает весь список с трубой и при отдельном выборе к примеру профильная он должен выдавать трубы профильные но не делает этого. Screenshot_9 а должен так выводить Screenshot_11

Как сделать поиск который будет находить подходящие значения а не только одно значение если указано как я понял.

Вот код поиска:
Python:
self.btn_search.clicked.connect(self.OnSearch)
def OnSearch(self):
        a = self.le_search.text().lower().split(" ")
        name = a[0].lower()
        kol_vo = str(a[-1].strip())
        if name != kol_vo:
            try:
                for row in range(self.tableWidget.rowCount()):
                    item = self.tableWidget.item(row, 0)
                    item_1 = self.tableWidget.item(row, 4)
                    if name in item.text().lower() and kol_vo == item_1.text():
                        pass
                    else:
                        self.tableWidget.setRowHidden(row, True)
            except Exception as ex:
                for row in range(self.tableWidget.rowCount()):
                    item = self.tableWidget.item(row, 0)
                    self.tableWidget.setRowHidden(row, name not in item.text().lower())
        else:
            for row in range(self.tableWidget.rowCount()):
                item = self.tableWidget.item(row, 0)
                self.tableWidget.setRowHidden(row, name not in item.text().lower())
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    11,5 КБ · Просмотры: 0
  • Screenshot_2.jpg
    Screenshot_2.jpg
    75,5 КБ · Просмотры: 0
  • Screenshot_3.jpg
    Screenshot_3.jpg
    15 КБ · Просмотры: 0
  • Screenshot_4.jpg
    Screenshot_4.jpg
    9,5 КБ · Просмотры: 0
  • Screenshot_5.jpg
    Screenshot_5.jpg
    12,8 КБ · Просмотры: 0
  • Screenshot_6.jpg
    Screenshot_6.jpg
    148,4 КБ · Просмотры: 0
  • Screenshot_7.jpg
    Screenshot_7.jpg
    13,6 КБ · Просмотры: 0
  • Screenshot_8.jpg
    Screenshot_8.jpg
    7,2 КБ · Просмотры: 0
  • Screenshot_9.jpg
    Screenshot_9.jpg
    80,7 КБ · Просмотры: 0
  • Screenshot_11.jpg
    Screenshot_11.jpg
    169,6 КБ · Просмотры: 0

loneres

Новичок
Пользователь
Ноя 21, 2021
7
0
1
Вот код который фильтрует товар

Если нажать Труба - то выходят все товары труба


Python:
def stepan18(self):
        textname = self.btn_19.text().lower()
        for row in range(self.tableWidget.rowCount()):
            item = self.tableWidget.item(row, 0)
            self.tableWidget.setRowHidden(row, textname not in item.text().lower())

И второй фильтр то же самое но только Там идут разновидности трубы

Тоесть Труба - потом выбираешь профильная и он должен выдавать только профильные трубы
 

Форум IT Специалистов