- class QSqlRelationalTableModel#
QSqlRelationalTableModel
类提供了一个带有外键支持的单一数据库表的编辑数据模型。更多…摘要#
方法#
def
__init__()
def
relation()
def
setJoinMode()
虚函数#
def
relationModel()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建ticket来告诉我们
详细描述#
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QSqlRelationalTableModel
的行为类似于QSqlTableModel
,但允许将列设置为指向其他数据库表的键。左边的截图显示了一个普通的
QSqlTableModel
在 QTableView 中。外键(city
和country
)没有转换为人类可读的值。右边的截图显示了一个QSqlRelationalTableModel
,其中外键已转换为可读文本字符串。以下代码片段显示了如何设置
QSqlRelationalTableModel
model.setTable("employee") model.setRelation(2, QSqlRelation("city", "id", "name")) model.setRelation(3, QSqlRelation("country", "id", "name"))
setRelation()
函数调用建立两个表之间的关系。第一次调用的指定了`employee`表中的第2列是一个外键,映射到`city`表的`id`字段,并且视图应向用户呈现`city`的`name`字段。第二次调用对第3列执行类似操作。如果您使用的是读写
QSqlRelationalTableModel
,您可能希望在视图上使用QSqlRelationalDelegate
。与默认委托不同,QSqlRelationalDelegate
为指向其他表的字段提供一个组合框。要使用此类,只需在视图上调用 QAbstractItemView::setItemDelegate(),并传递一个QSqlRelationalDelegate
实例即可。std.unique_ptr<QTableView> view{QTableView()} view.setModel(model) view.setItemDelegate(QSqlRelationalDelegate(view.get()))
relationaltablemodel 示例演示了如何使用
QSqlRelationalTableModel
与QSqlRelationalDelegate
结合使用,以提供具有外键支持的表格。注意
表必须声明一个主键。
表的主键可能不包含对另一个表的关联。
如果一个关系表包含引用表不存在行的键,则包含无效键的行不会通过模型暴露。用户或数据库负责维护引用完整性。
如果关系的显示列名同时用作关系表中的列名,或者在多个关系中用作显示列名,则它将被重命名。别名是关系的表名、显示列名和唯一ID通过下划线连接(例如:tablename_columnname_id)。
fieldName()
将返回重命名的列名。在检测到重复显示列名时,所有重复发生的情况都将被重命名,但不会对主表中的列名进行重命名。别名不应用于QSqlRelation
,因此displayColumn()
将返回原始显示列名。参考表名被重命名。别名是“relTblAl”这个词与相关列索引通过下划线连接(例如:relTblAl_2)。别名可用于过滤表(例如,设置过滤器:“relTblAl_2=’Oslo’ OR relTblAl_3=’USA’”)。
当使用
setData()
时,应始终使用Qt::EditRole角色,当使用data()
时,角色应始终是Qt::DisplayRole。
参见
QSqlRelation
QSqlRelationalDelegate
关系表模型示例- class JoinMode#
常量
描述
QSqlRelationalTableModel.InnerJoin
内部连接模式,当两个表至少有一个匹配时返回行。
QSqlRelationalTableModel.LeftJoin
左连接模式,返回左表(表名1)的所有行,即使右表(表名2)中没有匹配。
- __init__([parent=None[, db=QSqlDatabase()]])#
- 参数:
parent –
QObject
db –
QSqlDatabase
创建一个空的
QSqlRelationalTableModel
实例,并将父对象设置为parent
以及数据库连接设置为db
。如果db
无效,将使用默认的数据库连接。- relation(column)#
- 参数:
列 – int
- 返回类型:
返回指定列
column
的关联,如果没有设置关联则返回无效关联。参见
setRelation()
isValid()
- relationModel(column)#
- 参数:
列 – int
- 返回类型:
返回一个
QSqlTableModel
对象,用于访问column
作为外键的表,或者如果给定列没有关联,则返回None
。返回的对象归
QSqlRelationalTableModel
所有。参见
setRelation()
relation()
设置SQL的
joinMode
以显示或隐藏具有NULL外键的行。在内连接模式(默认模式)中,这些行不会显示:如果您想显示这些行,请使用LeftJoin
模式。参见
- setRelation(column, relation)#
- 参数:
列 – int
关联 –
QSqlRelation
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
允许特定的
列
通过relation
指定为一个外键索引。示例
model.setTable("employee") model.setRelation(2, QSqlRelation("city", "id", "name"))
setRelation() 调用指定了表
employee
中的第 2 列是外键,与表city
的id
字段相关联,并且视图应将city
的name
字段呈现给用户。注意:表的 主键可能不包含与其他表的关联。
参见