QSqlRelationalTableModel其他相关列

2024-04-20 12:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QSqlRelationalTableModel设置,其中一个QSqlRelation到另一个表工作得很好。现在,我想在相关表中查找该行的其他列。我该怎么做?在

示例表格:

city ('id', 'name', 'state_id')
state ('id', 'name', 'capital')

到目前为止我所拥有的:

^{pr2}$

这会让我大吵大闹:

| 1 | 'San Francisco' | 'California' |

现在我想从city表中查找state模型中的capital。我该怎么做?我对setRelation的理解是,它从X列的主表中获取id,并用映射的列替换它,但我不想更改状态表。我已经研究了QSqlRecord和{},但我似乎遗漏了一些东西。在

谢谢!在


Tags: name模型id示例city表格statesan
2条回答

当要显示的表中有外键时,QSqlRelationalTableModel非常有用。在您的例子中,capital不是city表的列。在

您应该改为使用QSqlQueryModelJOIN这两个表来获取所需的列。这样的事情应该行得通

model = QtSql.QSqlQueryModel()
model.setQuery("SELECT city.id, city.name, state.name, state.capital FROM city "
                "INNER JOIN state ON city.state_id = state.id");
model.select()

我发现实现我所要做的事情的最好方法是使用QSqlRelationalTableModel并重写selectStatement。在

失败的尝试:

使用其他列重载setRelation:

model.setRelation(2, QtSql.QSqlRelation("state", "id", "name, capital"))

当这显示数据时,如果您正在使用QSqlRelationalDelegate,它会中断QSqlRelationalDelegate。在

我还尝试添加了一个方法来搜索relationModel,但这似乎比selectStatement()方法更糟糕。在

^{pr2}$

根据@pnezis的建议,我也研究了QSqlQueryModel,但在文档中是这样写的

The QSqlQueryModel class provides a read-only data model for SQL result sets...

但它为我指明了正确的方向。谢谢

相关问题 更多 >