- 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?
I have already tried
attribute_changed = feature.setAttribute(field_idx, 12345)
and
feature[attribute_name] = 12345
with no success either.
In my real scenario the value would be dynamic and defined elsewhere, the 12345
is just an example.