我有一个基于QSqlTableModel的QTableView。
我想过滤显示的信息:用户在组合框中选择一年,在多个选项列表中选择一个或多个工具。 QTableView数据由这两个小部件过滤。我的问题是数据在一年中被正确过滤,但仅限于所选择的第一个人。其他人的数据不会显示。
这是创建窗口小部件和模型,填充它并过滤它以在QTableView中显示信息的代码:
self.model = QtSql.QSqlTableModel(self, self.db)
self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
self.ui.tbv_suivtemp.setModel(self.model)
self.model.setTable("bdsuivis.t_suivprev_tablo")
self.model.select()
self.model.setHeaderData(22, QtCore.Qt.Horizontal, "Annee")
self.model.setHeaderData(21, QtCore.Qt.Horizontal, "Salarie")
annee = self.ui.cbx_channee.itemText(self.ui.cbx_channee.currentIndex())
if len(annee) == 0 and len(self.text_sal) == 0:
self.model.setFilter("")
else:
filtre = "annee = '%s' AND salaries IN ('%s')" % (annee, self.text_sal)
print filtre
self.model.setFilter(filtre)
这是创建self.text_sal
的代码:
def choisal(self):
list_sal = []
for item in xrange (len(self.ui.lst_salaries.selectedItems())):
salarie = self.ui.lst_salaries.selectedItems()[item].text().replace("\'","\'\'")
list_sal.append(salarie)
self.text_sal = ", ".join((str(x) for x in list_sal)).replace(",","\',\'")
print filtre
给出:
annee ='2014'和工资IN('Dupont Albert','Durant Hector')
表示SQL查询中的WHERE子句。
我的问题是:年份已正确过滤,但仅适用于“Albert Dupont” - 未显示“Hector Durant”的数据。如果作为用户,我第一次点击“Hector Durand”,在我的多个选项列表中,然后在“Albert Dupont”上,将显示2014年“Hector Durand”的数据。
这是QSqlTableModel过滤器的正常行为吗?有没有办法为这两个人获取数据?