与QSql中列的关系建立关系

时间:2015-07-23 16:49:25

标签: qt pyqt5 qsqldatabase

我正在尝试显示一个与列关系有关系的QSqlRelationalTableModel。

这是我的最小代码:

from PyQt5.QtSql import QSqlDatabase, QSqlRelationalTableModel, QSqlRelation
from PyQt5.QtWidgets import QApplication, QAbstractItemView, QTreeView
from PyQt5.QtCore import QSortFilterProxyModel
import sys

app = QApplication(sys.argv)

db = QSqlDatabase().addDatabase('QMYSQL')
[...]
db.open()

micTableModel = QSqlRelationalTableModel(None, db)
micTableModel.setTable('mic')
micTableModel.setRelation(1, QSqlRelation('equipmentgroup', 'id', 'name'))
micTableModel.setRelation(9, QSqlRelation('lending', 'id', 'XXX'))  #### <-- PROBLEM
micTableModel.select()

filterModel = QSortFilterProxyModel()
filterModel.setSourceModel(micTableModel)

widget = QTreeView()
widget.setModel(filterModel)
widget.setSortingEnabled(True)
widget.setRootIsDecorated(False)
widget.setEditTriggers(QAbstractItemView.NoEditTriggers)
widget.show()

sys.exit(app.exec_())

micTableModel的第9列包含表'贷款'中条目的键。 'lending'本身有一个user_id,它与表'ldapuser'中的条目有关。最后'ldapuser'包含'用户名',我想在micTableModel中显示。

我有什么想法可以在我的micTableModel中建模这样的关系吗?

1 个答案:

答案 0 :(得分:0)

我不知道是否可以在QSqlRelationalTableModel中建模层次关系。我想,你需要父表中的所有外键。但您可以在数据库中创建一个视图,其中包含麦克风字段之外的lending.user_id,并将此视图用作micTableModel.setTable(yourView)中的表格:

create view yourView as
select m.*, l.user_id 
from mic m inner join lending l
on m.<name of field 9> = l.id

并将关系设置为ldapuser