删除子类 QSQLTableModel 中的行不更新数据库

问题描述

我已经将 QsqlTableModel 子类化来控制表视图中的不同显示内容(例如负值的红色、十进制数字的动态数量等)并且工作正常。

当我尝试删除一行时,该方法不起作用,而不是删除底层数据库中的行。`

class CustomsqlTableModel(QsqlTableModel):
    
    def __init__(self,table,*args,**kwargs):
        super(CustomsqlTableModel,self).__init__(*args,**kwargs)

        self.setTable(table)              
        self.setEditStrategy(QsqlTableModel.OnManualSubmit) #OnFieldChange
        self.select()
           
    def data(self,index,role ):
  
        # here several ifs to control display they work fine in TableView
        # even if I delete them and just leave out the bellow standard line it will not remove the row
  
        return QsqlTableModel.data(self,role)
  
    def setData(self,value,role = Qt.EditRole):
        if not index.isValid():
            return False

        return QsqlTableModel.setData(self,role)

model = CustomsqlTableModel(db = my_conn,table = 'my_table')

print(model.rowCount())  # returns the number of rows

a = model.removeRow(2)

print(a)  # returns True

b = model.submitAll()

print(b)   # returns True

c = model.select()

print(c)  # returns True

print(model.rowCount())  # returns the same number of rows

如果我删除 QsqlTableModel 的 Data 和/或 setData 重新实现,RemoveRow 会起作用并从数据库删除该行。

但是如果在 Data() 方法中我只保留复制 Base 类方法的标准行,RemoveRow 也将不起作用。所以在子类化中我做错了一定是非常基本的东西。

我在其他回复中看到暗示应该在 Data() 方法重新实现中考虑 EditRole 和/或 Record() 方法,但我无法弄清楚。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)