QSqlTableModel过滤器只接受第一个参数

时间:2017-12-05 16:02:47

标签: python pyqt filtering qtableview qsqltablemodel

我有一个基于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过滤器的正常行为吗?有没有办法为这两个人获取数据?

0 个答案:

没有答案