I have two QTableView the first one with QSqlTableModel I have no probleme when I edit it s data using QDialog when double click event happened.
self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.table.doubleClicked.connect(self.editeParent)
self.filter_proxy_model = QSortFilterProxyModel()
self.filter_proxy_model.setSourceModel(self.parentsModel.model)
self.filter_proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
self.filter_proxy_model.setFilterKeyColumn(-1)
self.table.setModel(self.filter_proxy_model)
The function 'edit Parent' open the dialog and set the data and then after editing return the new data to the database and QTableView updated but I can't do the same with the second one because it's related to the first one the second with QSqlRelationalTableModel that have relation to the first table
tableModel = QSqlRelationalTableModel()
tableModel.setTable("souparent")
tableModel.setRelation(
3, QSqlRelation("parent", "id", "name"))
#tableModel.select()
tableModel.setEditStrategy(QSqlTableModel.EditStrategy.OnManualSubmit)
tableModel.select()
headers = ("ID", "Name", "Note", "Parent")
for columnIndex, header in enumerate(headers):
tableModel.setHeaderData(columnIndex, Qt.Horizontal, header)
return tableModel
def getparent(self):
query = QSqlQuery("SELECT id, name FROM parent ")
query.exec()
resul = []
while query.next():
resul.append([query.value(0), query.value(1)])
return resul
tableModel.setRelation(3, QSqlRelation("parent", "id", "name"))
def updateParent(self, row, data):
for column, field in enumerate(data):
self.model.setData(self.model.index(row, column + 1), field)
self.model.submitAll()
self.model.select()
this is the model ans this is the view table
self.table = QTableView()
self.table.doubleClicked.connect(self.editeParent)
# self.table.setModel(self.parentsModel.model)
self.table.verticalHeader().hide()
self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
# self.table.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
# search filter
self.filter_proxy_model = QSortFilterProxyModel()
self.filter_proxy_model.setSourceModel(self.souparentsModel.model)
self.filter_proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
self.filter_proxy_model.setFilterKeyColumn(-1)
self.table.setModel(self.filter_proxy_model)
#delegate = QSqlRelationalDelegate(self.table)
#self.table.setItemDelegate(delegate)
# self.table.resizeColumnsToContents()
# Create buttons
def editeParent(self):
dialog = EditeDialog(self)
row = self.table.currentIndex().row()
indes = self.table.selectedIndexes()
dialog.nameField.setText(str(indes[1].data()))
dialog.noteField.setText(str(indes[2].data()))
# dialog.parentlField.addItem(str(indes[3].data()))
lista = self.souparentsModel.getparent()
for list in lista:
dialog.parentlField.addItem(list[1])
dialog.parentlField.setCurrentText(indes[3].data())
if dialog.exec() == QDialog.Accepted:
data1 = dialog.nameField.text()
data2 = dialog.noteField.text()
data3 = dialog.parentlField.currentText()
# print(data3)
data4 = None
for lisst in lista:
if data3 in lisst:
data4 = str(lisst[0])
print(data4)
data = [data1, data2, data4]
print(data)
self.souparentsModel.updateParent(row, data)
How can I write the function to edite each selected row with qdialog
I'm trying to edite row in my tableview with dialog
def editeParent(self):
dialog = EditeDialog(self)
row = self.table.currentIndex().row()
indes = self.table.selectedIndexes()
dialog.nameField.setText(str(indes[1].data()))
dialog.noteField.setText(str(indes[2].data()))
# dialog.parentlField.addItem(str(indes[3].data()))
lista = self.souparentsModel.getparent()
for list in lista:
dialog.parentlField.addItem(list[1])
dialog.parentlField.setCurrentText(indes[3].data())
if dialog.exec() == QDialog.Accepted:
data1 = dialog.nameField.text()
data2 = dialog.noteField.text()
data3 = dialog.parentlField.currentText()
# print(data3)
data4 = None
for lisst in lista:
if data3 in lisst:
data4 = str(lisst[0])
print(data4)
data = [data1, data2, data4]
print(data)
self.souparentsModel.updateParent(row, data)
What is the correct way to do that?