Mus*_*iev 6 python pyqt qsqltablemodel pyqt5 qsqlrelationaltablemodel
我有一个QTableView由QSqlRelationalTableModel.
有一个列引用另一个表,因此当我编辑/创建一行时,该列的编辑器将从QCombobox相关表中获取其数据。问题是我想使用相关表上的一些预定义WHERE来过滤数据。
例子:
表格:
Person:
id, name, job_id;
Job:
id, title, salary
Run Code Online (Sandbox Code Playgroud)
我想要的是类似的东西
model.setRelation(3,QSqlRelation("Job", "id", "title", "WHERE salary > 50000"))
Run Code Online (Sandbox Code Playgroud)
这样 QCombobox 将只包含薪资 > 5000 的职位。
我无法按照SO 问题QSqlQueryModel中的建议使用- 我仍然需要用户能够添加新数据或编辑现有数据。
似乎10 年前就有人通过调整 QT 源代码成功实现了这一点,但我的 C++ 很糟糕,所以我无法很好地理解它。
可能的解决方案:
我想到的第一件事是实现我自己的QSqlRelationalDelagate并填充QCombobox并createEditor在 中设置适当的值setModelData。我会尝试自己做并在这里报告结果。但对我来说似乎不太干净。
最好的方法是扩展QSqlRelation或 的功能QSqlRelationalTableModel,但其文档似乎不是很清楚。因此,对于经验丰富的 QT/PyQT 开发人员来说,真正的问题是:如何以这种方式解决问题?
更新
QCombobox因此,过滤掉委托中的内容是可行的createEditor,但每次创建编辑器时都需要进行数据库查询,这似乎有点不对劲。而且过滤后处理新索引也很混乱。但我仍然想知道解决问题的第二种方法。