Intento establecer atributos de características por nombre de atributo con este código
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
pero como resultado tengo NULL en todos los campos. Si yo uso
feature.setAttributes([1])
Funciona correctamente.
¿Qué hice mal? ¿Por qué la función [attrName] = 1 no funciona?
Actualización : encuentre esta solución
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
pr.changeAttributeValues({feature.id() : {pr.fieldNameMap()[attrName] : 1}})
feature.setAttribute(attrName, 1)
yfeature.setAttribute(layer.fieldNameIndex(attrName), 1)
con los mismos resultados (la referencia de la API tiene dos métodos setAttribute para la función con índice y nombre)feature[layer.fieldNameIndex(attrName)] = 1
también el mismo.feature.initAttributes(len(attributes))
)?feature.initAttributes(1)
con el mismo resultado. Pero compruebofeature[attrName]
y obtuve 1 que estaba buscando. Pero aún tengo NULL si abro Attribute Table en gui.