[Qgis-user] pyQGIS - set attributes by expression

Nyall Dawson nyall.dawson at gmail.com
Thu Feb 7 15:04:58 PST 2019


On Thu, 7 Feb 2019 at 23:19, Wouter Impens <wouter.impens at gmail.com> wrote:
>
> Thanks for the help Nyall, but I still don't get any result.

>     for a_feat in my_features:
*snip*
>         a_feat.setAttribute(my_index, value)
>
>     a_layer.commitChanges()

Ok, your problem here is that `a_feat` is always a COPY of the feature
from the layer, not a linked reference to that feature itself. You
edit the attributes in the copy, but that doesn't actually change the
feature in the layer itself. To do that you need to add:

for a_feat in my_features:
  a_feat.setAttribute(my_index, value)
  a_layer.updateFeature(a_feat)
a_layer.commitChanges()


Nyall

>
> The first part - ading the attribute - works fine, but filling in the fields don't give any result (nor an error either).
> I'm working in QGIS 3.
>
> Thanks!
> Wouter
>
>
> Op do 7 feb. 2019 om 08:08 schreef Nyall Dawson <nyall.dawson at gmail.com>:
>>
>> On Wed, 6 Feb 2019 at 18:14, Wouter Impens <wouter.impens at gmail.com> wrote:
>> >> > I'm trying to iterate over the fields of a vector layer (using the index) and fill in the values by an expression
>> >> >
>> >> >  my_features = a_layer.getFeatures()
>> >> >     for a_feat in my_features:
>> >> >         mijn_index = a_feat.fieldNameIndex('perc_nr')
>> >> >         value = an_expr
>>
>> Change this to:
>>
>> my_features = a_layer.getFeatures()
>> context = QgsExpressionContext()
>> for a_feat in my_features:
>>     mijn_index = a_feat.fieldNameIndex('perc_nr')
>>     context.setFeature(a_feat)
>>     value = an_expr.evalute(context)
>>     ...
>>
>> Nyall
>>
>>
>> >>
>> >> What's "an_expr" here? Is it a QgsExpression object?
>> >>
>> >> Nyall
>> >>
>> >> >          a_feat.setAttribute(mijn_index, value)
>> >> >
>> >> >     a_layer.commitChanges()
>> >> >
>> >> > I don't get an error but nothing is filled in. I evaluated the expression and it's true. It also works in the field calculator.
>> >> >
>> >> > Anyone an idea?
>> >> >
>> >> >
>> >> > Kind regards
>> >> > Wouter
>> >> > _______________________________________________
>> >> > Qgis-user mailing list
>> >> > Qgis-user at lists.osgeo.org
>> >> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>> >> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user


More information about the Qgis-user mailing list