Фильтр по двум столбцам в QTableView с использованием QSqlTableModel
Для вывода данных из таблицы БД в QTableView использую QSqlTableModel. Для фильтрации по столбцам применяю метод setFilter. Пример используемого кода.
self.model = QtSql.QSqlTableModel()
self.ui.tableView.setModel(self.model)
grid = QtWidgets.QGridLayout(self)
grid.addWidget(self.ui.lineEdit_2, 0, 0)
grid.addWidget(self.ui.comboBox_2, 0, 1)
grid.addWidget(self.ui.tableView, 1, 0, 1, 2)
self.model.setTable("client")
self.model.select()
type_col = QtCore.Qt.Horizontal
self.ui.comboBox_2.clear()
for i in range(self.model.columnCount()):
self.ui.comboBox_2.addItem(self.model.headerData(i, type_col))
self.ui.lineEdit_2.textChanged.connect(self.filter_table_client)
headers_view = ["N", "Фамилия", "Имя", "Отчество", "Дата рожд.",
"Пол", "Телефон", "Email", "Категория"]
for i in range(len(headers_view)):
self.model.setHeaderData(i, Qt.Horizontal, headers_view[i])
def filter_table_client(self, text):
filter = (" {} LIKE '%{}%'".format(self.ui.comboBox_2.currentText(),
text) if text else text)
self.model.setFilter(filter)
Фильтр работает.
Но результат все равно большой и надо как-то применить дополнительное условие. Возможно ли применять фильтр для двух столбцов? И можно ли вводить в LineEdit фильтрующую строку вида "Иванов Иван" применяя такой метод поиска нужных данных?
