mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-09 00:08:52 -04:00
Merge pull request #46172 from m-kuhn/preserve_attribute_type_in_dialog_update
Preserve attribute type in dialog update
This commit is contained in:
commit
112754fa69
@ -551,8 +551,9 @@ void QgsAttributeForm::updateValuesDependenciesDefaultValues( const int originId
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
QgsExpressionContext context = createExpressionContext( updatedFeature );
|
QgsExpressionContext context = createExpressionContext( updatedFeature );
|
||||||
QString value = mLayer->defaultValue( eww->fieldIdx(), updatedFeature, &context ).toString();
|
const QVariant value = mLayer->defaultValue( eww->fieldIdx(), updatedFeature, &context );
|
||||||
eww->setValue( value );
|
eww->setValue( value );
|
||||||
|
mCurrentFormFeature.setAttribute( eww->field().name(), value );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
1
tests/Testing/Temporary/CTestCostData.txt
Normal file
1
tests/Testing/Temporary/CTestCostData.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
---
|
@ -22,13 +22,17 @@ from qgis.core import (
|
|||||||
QgsEditorWidgetSetup,
|
QgsEditorWidgetSetup,
|
||||||
QgsEditFormConfig,
|
QgsEditFormConfig,
|
||||||
QgsAttributeEditorElement,
|
QgsAttributeEditorElement,
|
||||||
|
QgsDefaultValue,
|
||||||
|
QgsField
|
||||||
)
|
)
|
||||||
from qgis.gui import (
|
from qgis.gui import (
|
||||||
QgsAttributeForm,
|
QgsAttributeForm,
|
||||||
QgsGui,
|
QgsGui,
|
||||||
QgsEditorWidgetWrapper,
|
QgsEditorWidgetWrapper,
|
||||||
QgsMapCanvas
|
QgsMapCanvas,
|
||||||
|
QgsAttributeEditorContext
|
||||||
)
|
)
|
||||||
|
from qgis.PyQt.QtCore import QVariant
|
||||||
|
|
||||||
QGISAPP = start_app()
|
QGISAPP = start_app()
|
||||||
|
|
||||||
@ -115,6 +119,28 @@ class TestQgsAttributeForm(unittest.TestCase):
|
|||||||
for field_type, value in field_types.items():
|
for field_type, value in field_types.items():
|
||||||
self.checkForm(field_type, value)
|
self.checkForm(field_type, value)
|
||||||
|
|
||||||
|
def test_on_update(self):
|
||||||
|
"""Test live update"""
|
||||||
|
|
||||||
|
layer = QgsVectorLayer("Point?field=age:int", "vl", "memory")
|
||||||
|
# set default value for numbers to [1, {age}], it will depend on the field age and should update
|
||||||
|
field = QgsField('numbers', QVariant.List, 'array')
|
||||||
|
field.setEditorWidgetSetup(QgsEditorWidgetSetup('List', {}))
|
||||||
|
layer.dataProvider().addAttributes([field])
|
||||||
|
layer.updateFields()
|
||||||
|
layer.setDefaultValueDefinition(1, QgsDefaultValue('array(1, age)', True))
|
||||||
|
layer.setEditorWidgetSetup(1, QgsEditorWidgetSetup('List', {}))
|
||||||
|
layer.startEditing()
|
||||||
|
form = QgsAttributeForm(layer)
|
||||||
|
feature = QgsFeature(layer.fields())
|
||||||
|
form.setFeature(feature)
|
||||||
|
form.setMode(QgsAttributeEditorContext.AddFeatureMode)
|
||||||
|
form.changeAttribute('numbers', [12])
|
||||||
|
form.changeAttribute('age', 1)
|
||||||
|
self.assertEqual(form.currentFormFeature()['numbers'], [1, 1])
|
||||||
|
form.changeAttribute('age', 7)
|
||||||
|
self.assertEqual(form.currentFormFeature()['numbers'], [1, 7])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user