问题标签 [qsqlrelationaltablemodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
56 浏览

python - 更新 QSqlRelationalTableModel 中的相关表

我有一个像这样的 QSqlRelationalTableModel:

但是现在linked_table 中的数据发生了变化(例如添加了一行)。如何更新关系以使用linked_table 的修改数据。

注意:我不想使用rel_model.select(),因为 main_table 中的一些数据也被修改了,然后它们将被丢弃。我正在使用 SQlite 数据库。

0 投票
0 回答
179 浏览

python - 在 QSqlRelationalTableModel 中插入行,同时显示外键的两列

我有两个具有以下结构的 SQLite 表:

我还想显示QTableView使用 a 的 a QSqlRelationalTableModel。我需要显示两列 (category_nametype) 而不是category_id,尽管QSqlRelation似乎只用一列替换了外键,但我设法显示了 2 列,如下所示:

现在,当我想添加一个新行时,只有当我加入没有类型的两个表时,插入才有效,即

插入代码:

如何在仍然能够显示type列的同时使插入工作?

0 投票
1 回答
28 浏览

qt - QSqlRelationalModel:我调用setRelation(...)后,模型中的列似乎被外部表中的列替换了

在 setRelation(...) 之后,如何获取似乎已被外表中的列替换的列的原始值?

这是我的代码:

表“记录”包含“recordId 整数、bookId 整数、bookName varchar、作者 varchar、 流派整数、userId 整数、userName varchar、borrowDate 日期、returnDate 日期、recordState 整数”。

表“流派”包含“id 整数主键,流派 varchar”。

该行QVariant value = bookRecord->value(4); 返回表“genres”中的内容,它是 QString,而不是表“record”中的原始值类型,它是整数

这里我想将第 4 节 bookRecord 的原始值赋给 QVariant 变量值。我该怎么做?

谁能给我一些建议?

0 投票
1 回答
133 浏览

python - QSortFilterProxyModel headerData

我有 2 个 QTableViews 连接到 2 个 QSortFilterProxyModels,它们仅连接到 1 个源模型(QSqlRelationalTableModel)。

在对任何代理模型进行排序或过滤时,它会反映在相应的表视图中。但是当我修改其中一个代理模型的标题数据(装饰角色)时,它会出现在两个表视图中。

我的问题是,标头数据是直接应用于源模型还是仅应用于代理?

我用它来创建一个 sqlite 示例数据库:

这是在为代理模型应用装饰时显示我的问题的窗口:

0 投票
1 回答
167 浏览

sqlite - QSortFilterProxyModel 仅对获取的数据进行排序

我有一个 QTableView,其模型为 QSortFilterProxyModel,其源模型为 QSqlRelationalTableModel。

当我通过 QSortFilterProxyModel 对查看的数据进行排序或过滤时,只有获取的数据受到影响。

我设法通过使用从表中获取所有数据来使其工作

问题是该表有大量记录(200,000 条记录)。

有没有其他方法可以在不从数据库中获取所有数据的情况下对代理模型进行排序和过滤?

0 投票
1 回答
227 浏览

python - QSqlRelationalDelegate 显示 foreign_key - 相关记录的 id,而不是 Combobox 中的名称/值

我正在尝试添加QSqlRelationalModelQTableView.

我在模型中设置了适当的QSqlRelationalDelegate和适当QSqlRelations的。显示数据库中的现有数据工作正常。具有相关数据的列更改为组合框,我可以从相关表中选择选项。

但是,当我尝试通过向模型添加一行来创建新记录时,组合框允许我从下拉列表中选择正确的值,但是在选择它之后,该值会更改为相关记录的 ID,就好像没有关系委托已设置。

主.py

数据库

这个问题可能与一个6 岁未回答的问题有关

0 投票
1 回答
154 浏览

python - 从关系模型填充并连接到 QDataWidgetMapper 的 QComboBox 在 setEditable(True) 时行为异常

我有一个从 QSqlRelationalTableModel 的关系模型填充并连接到 QDataWidgetMapper 的 QComboBox。

我在 QTableView 中选择一行,该行(记录)映射到 QLineEdit 和 QComboBox 小部件,然后我进行一些更改并保存。

如果我选择另一行并保存而不更改 QComboBox 值,则该值会更改并提交给模型。

我使用可编辑组合框不是为了将项目添加到列表中,而是在我有一个大列表而不是下拉组合框视图时使用完成功能

创建数据库:

这是窗口:

0 投票
0 回答
25 浏览

python - Python QSql关系

我正在使用 QtableView 显示来自 QSqlRelationalTableModel 的数据,这似乎工作正常,但是当我使用 self.motormodel.setRelation(1, QSqlRelation('Instruments', "Asset Tag","Description" )) self.ui.motorTableView.setItemDelegate(QSqlRelationalDelegate(self.ui.motorTableView))

在视图上创建 QSqlRelationalDelegate 并尝试使用 tableView 中列的标题对列进行排序,表不会刷新,并且我会丢失视图中的模型数据。

如果我注释掉, self.motormodel.setRelation(1, QSqlRelation('Instruments', "Asset Tag","Description" )) 那么它会按预期工作并且排序工作。

有谁知道我错过了什么?

0 投票
0 回答
120 浏览

python - 由 QSqlRelationalDelegate/QSqlRelation 提供的过滤选项根据一些 WHERE close

我有一个QTableViewQSqlRelationalTableModel.

有一列引用另一个表,所以当我编辑/创建一行时,该列的编辑器是QCombobox从相关表中获取其数据的。问题是我想在相关表上使用一些预定义的WHERE close 来过滤数据。

例子:

我想要的是类似的东西

这样 QCombobox 将只有薪水 > 5000 的职位。

我不能按照SO 问题QSqlQueryModel中的建议使用- 我仍然需要用户能够添加新数据或编辑现有数据。

似乎有人在 10 年前通过调整 QT 源代码设法实现了这一点,但是我的 C++ 很糟糕,所以我无法很好地理解它。

可能的解决方案:

  1. 首先想到的是实现我自己的QSqlRelationalDelagate并在. 我会尝试自己做,然后在这里报告结果。但对我来说似乎不是很干净QComboboxcreateEditorsetModelData

  2. 最好的方法是扩展QSqlRelationor的功能,QSqlRelationalTableModel但它的文档似乎不是很清楚。所以真正的问题是对于有经验的 QT/PyQT 开发人员:我如何以这种方式解决问题?


更新

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

0 投票
1 回答
28 浏览

python - 如何在 qsqlrelationaltablemodel 中更新或插入相关表

我有这个关系模型

主表包含来自该人的数据和来自该人的几封电子邮件的相关表。一对多的关系。我现在如何更新或插入电子邮件?我知道有插入查询,但我想必须有一种方法可以直接使用模型。