I try to set feature attributes by attribute name with this code
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
but in result I have NULL in all fields. If I use
feature.setAttributes([1])
it works properly.
What I do wrong? Why feature[attrName] = 1 doesn't work?
Update: Find this solution
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)andfeature.setAttribute(layer.fieldNameIndex(attrName), 1)with same results (api reference have two setAttribute methods for feature with index and name) – dmitry.v.kiselev Jan 20 '14 at 21:38feature[layer.fieldNameIndex(attrName)] = 1also the same. – dmitry.v.kiselev Jan 20 '14 at 21:44feature.initAttributes(len(attributes)))? – Jan Šimbera Jan 20 '14 at 21:45feature.initAttributes(1)with same result. But checkfeature[attrName]and got 1 which I looking for. But still have NULL if I open Attribute Table in gui. – dmitry.v.kiselev Jan 20 '14 at 21:56