The title says it all. I want to remove all joins from a layer.

After examining the QGIS API documentation and playing a bit with the QgsVectorLayer class I've figured out how to do it but my doubt is whether there's a better way to do this same thing. I haven't found a single example using QgsVectorLayer.vectorJoins nor anything related to identifying which tables are joined to a layer so I don't know if this is actually the way to go.

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    if layer.name() == "Fire Halls":
        fh_lyr = layer

joinsInfo = fh_lyr.vectorJoins()
for joinInfo in joinsInfo:
    ok = fh_lyr.removeJoin(joinInfo.joinLayerId)
    if ok:
        progress.setInfo(u'Join removed successfully')
        msg = "Couldn't remove the layer join"
        raise GeoAlgorithmExecutionException(msg)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.