#modifie the QSqlQueryModel to be editable and sets them to the database #credits to : #https://stackoverflow.com/questions/49752388/editable-qtableview-of-complex-sql-query class SqlQueryModel_editable(QSqlQueryModel): """a subclass of QSqlQueryModel where individual columns can be defined as editable """ def __init__(self, editables): """editables should be a dict of format: {INT editable_column_nr : (STR update query to be performed when changes are made on this column INT model's column number for the filter-column (used in the where-clause), )} """ super().__init__() self.editables = editables def flags(self, index): fl = QSqlQueryModel.flags(self, index) if index.column() in self.editables: fl |= Qt.ItemIsEditable return fl def setData(self, index, value, role=Qt.EditRole): if role == Qt.EditRole: mycolumn = index.column() if mycolumn in self.editables: (query, filter_col) = self.editables[mycolumn] filter_value = self.index(index.row(), filter_col).data() q = QSqlQuery(query.format(value, filter_value)) result = q.exec_() if result: self.query().exec_() else: print(self.query().lastError().text()) return result return QSqlQueryModel.setData(self, index, value, role)