QGIS 3.28使用Python API设置图层字段约束失效问题求助
QGIS字段约束设置无效问题
- 使用版本:QGIS 3.28 Firenze
- 需求:给空白图层字段设置约束,具体包括:
- 指定字段必填(NotNull约束+强制非空)
- 部分字段设置数值范围约束
- 现状:通过PyQGIS从Excel读取字段参数,已成功配置属性表单部件类型、下拉列表、字段可编辑状态及默认值,但约束设置完全无效——代码运行无报错,其他配置均正常,仅约束不生效。
用到的代码片段
import pandas as pd from qgis.core import QgsProject, QgsFieldConstraints, QgsDefaultValue # 加载Excel文件到DataFrame df = pd.read_excel('EXCELPATH.xlsx') project = QgsProject.instance() i = 1 for index, row in df.iterrows(): layer_name = row['LayerName'] layer = project.mapLayersByName(layer_name)[0] if project.mapLayersByName(layer_name) else None if layer: field_idx = layer.fields().indexOf(row['FieldName']) if field_idx != -1: # 图层中存在匹配字段 print(i, "-", layer.name()) # 约束设置部分 if 'Constraints/NotNull' in df.columns and 'Constraints/Expression' in df.columns: # 初始化约束配置 constraintsconfig = QgsFieldConstraints() # 非空约束及强制生效 if row['Constraints/NotNull'] == True: print("NotNull Constraints READ") constraintsconfig.setConstraint(QgsFieldConstraints.ConstraintNotNull, QgsFieldConstraints.ConstraintOriginLayer) constraintsconfig.setConstraintStrength(QgsFieldConstraints.ConstraintNotNull, QgsFieldConstraints.ConstraintStrengthHard) # 表达式约束及描述 if pd.notna(row['Constraints/Expression']): print("Constraints Expression READ") constraintsconfig.setConstraint(QgsFieldConstraints.ConstraintExpression, QgsFieldConstraints.ConstraintOriginLayer) constraintsconfig.setConstraintStrength(QgsFieldConstraints.ConstraintExpression, QgsFieldConstraints.ConstraintStrengthHard) print("Constraints Expression Description READ") constraintsconfig.setConstraintExpression(row['Constraints/Expression'], row['Constraints/ExpressionDescription']) print(row['FieldName'], "Constraints Applied:", row['Constraints/Expression'], row['Constraints/ExpressionDescription']) # 更新图层字段约束 fields = layer.fields() field = fields.field(field_idx) print(field.name()) field.setConstraints(constraintsconfig) # 更新字段并提交更改 layer.updateFields() i=i+1 project.write()
内容的提问来源于stack exchange,提问作者KM_GIS
相关产品推荐
相关产品推荐

