Я пытаюсь установить атрибуты объекта по имени атрибута с этим кодом
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
но в результате у меня есть NULL во всех полях. Если я использую
feature.setAttributes([1])
это работает правильно.
Что я делаю не так? Почему функция [attrName] = 1 не работает?
Обновление : найти это решение
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)
иfeature.setAttribute(layer.fieldNameIndex(attrName), 1)
с теми же результатами (у API есть два метода setAttribute для функции с индексом и именем)feature[layer.fieldNameIndex(attrName)] = 1
тоже самое.feature.initAttributes(len(attributes))
)?feature.initAttributes(1)
с тем же результатом. Но проверитьfeature[attrName]
и получил 1, который я искал. Но все равно имейте NULL, если я открою таблицу атрибутов в графическом интерфейсе.