[Qgis-developer] Value relations in QgsExpression

Marco Hugentobler marco.hugentobler at sourcepole.ch
Mon Jul 28 02:57:02 PDT 2014


In QgsVectorLayer, it is possible to define the edittype 'value 
relation' where a key is replaced by a value in a related layer. Now I'd 
like to make a function in QgsExpression that behaves similarly and 
returns the value in the related table.

My idea is to create a function 'valueRelation( value, layer_id, 
key_field, value_field )' to return that value, where layer_id is the id 
of the related layer, key_file and value_field the column names in the 
related layer.

One disadvantage of this approach is that if the relation in vectorlayer 
changes, the one in an expression needs to be changed as well. On the 
other hand it can be an advantage in certain situations to have a 
different relation in expression than in vector layer. I figured out it 
would be difficult to take the value relation dynamically from 
vectorlayer, as QgsExpression does not know its vectorlayer. A 
possibility would be to create a special column for the current layer 
id. However that seems not nice and it is too easy to forget to set that 
id when using the expression.

What are your opinions on that? Are there better ways to accomplish the 
value relation function in QgsExpression?


Dr. Marco Hugentobler
Sourcepole -  Linux & Open Source Solutions
Weberstrasse 5, CH-8004 Zürich, Switzerland
marco.hugentobler at sourcepole.ch http://www.sourcepole.ch
Technical Advisor QGIS Project Steering Committee

More information about the Qgis-developer mailing list