Hi Hannes,

i can unfortunately only confirm that this does not work, one can't seem to be 
able to set any field value (tried "text" as well). If you have the feature you 
can usually just do `feature["int"] = 12345` or feature.setAtrtribute("int", 
12345), but that does not have any effect on this particular feature - and it 
does not raise an error either.

I checked the feature's field map, also the value in "text", all seems right. 
One thing I noticed is that all newly created features in my test had the same 
feature.id() of -9223372036854775808 which seems rather high, usually, unsaved 
features have negative values, but counting downwards from 0 - at least from my 
last experience with PostGIS layers ... mayby memory layers behave different 
here.

I wonder if the feature you get from the event is the real feature that is 
added to the layer or some kind of read-only copy of it ...

Grüße
Frank
________________________________
Von: QGIS-Developer <qgis-developer-boun...@lists.osgeo.org> im Auftrag von 
Johannes Kröger (WhereGroup) via QGIS-Developer <qgis-developer@lists.osgeo.org>
Gesendet: Donnerstag, 4. Januar 2024 16:47
An: qgis-developer <qgis-developer@lists.osgeo.org>
Betreff: [QGIS-Developer] Changing attributes of a newly created feature in 
Python form init code


Hey guys,

I feel really dumb and I guess I am missing some basic concept...:

  *   I have a layer with two attributes: "text" (string) and "int" (integer).
  *   I used drag'n'drop form design to have a form with just the "text" 
attribute in it.
  *   I added Python Init Code:

```
from functools import partial

def on_ok(layer, feature):
    field_idx = layer.fields().indexOf("int")
    attribute_changed = layer.changeAttributeValue(feature.id(), field_idx, 
12345)
    if not attribute_changed:
        raise Exception("Attribute value could not be changed!")

def my_form_open(dialog, layer, feature):
    ok_button = dialog.findChild(QPushButton)
    ok_button.clicked.connect(partial(on_ok, layer, feature))
```

So the form does not show an input widget for the "int" field. But when 
pressing OK, the code should change the edited feature's "int" value to 12345.

This works if I edit existing features.

But if I create a new feature, the "int" value will be empty/NULL instead of 
12345.

Any pointers on how to properly update a new feature's attribute fields, that 
exist on a layer but are not shown the user with the QGIS' widgets in the 
attribute form?

Cheers, Hannes
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to