小编Mus*_*iev的帖子

QSqlRelationalDelegate/QSqlRelation 根据某些 WHERE close 提供的过滤选项

我有一个QTableViewQSqlRelationalTableModel.

有一个列引用另一个表,因此当我编辑/创建一行时,该列的编辑器将从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++ 很糟糕,所以我无法很好地理解它。

可能的解决方案:

  1. 我想到的第一件事是实现我自己的QSqlRelationalDelagate并填充QComboboxcreateEditor在 中设置适当的值setModelData。我会尝试自己做并在这里报告结果。但对我来说似乎不太干净

  2. 最好的方法是扩展QSqlRelation或 的功能QSqlRelationalTableModel,但其文档似乎不是很清楚。因此,对于经验丰富的 QT/PyQT 开发人员来说,真正的问题是:如何以这种方式解决问题?


更新

QCombobox因此,过滤掉委托中的内容是可行的createEditor,但每次创建编辑器时都需要进行数据库查询,这似乎有点不对劲。而且过滤后处理新索引也很混乱。但我仍然想知道解决问题的第二种方法。

python pyqt qsqltablemodel pyqt5 qsqlrelationaltablemodel

6
推荐指数
0
解决办法
303
查看次数