def buildJoin(self, originalLyr, originalLyrFieldName, joinnedLyr, joinLyrFieldName): """ Builds a join bewteen lyr and joinnedLyr. :param originalLyr: QgsVectorLayer original layer; :param originalLyrFieldName: (str) name of the field; :param joinnedLyr: QgsVectorLayer lyr to be joinned to originalLayer; :param joinLyrFieldName: (str) name of the join field name (usually primary key of joinnedLyr) """ joinObject = QgsVectorLayerJoinInfo() joinObject.setJoinFieldName(joinLyrFieldName) joinObject.setTargetFieldName(originalLyrFieldName) joinObject.setJoinLayer(joinnedLyr) joinObject.setJoinFieldNamesSubset() joinObject.upsertOnEdit(True) #set to enable edit on original lyr joinObject.setCascadedDelete(True) joinObject.setDynamicFormEnabled(True) joinObject.setEditable(True) joinObject.setUsingMemoryCache(True) originalLyr.addJoin(joinObject)
def joinTables(self): d, f = self.lyrPair() for k, v in d.items(): target = QgsProject.instance().mapLayer(k) layerToJoin = QgsProject.instance().mapLayer(v) fieldToJoin = QgsProject.instance() symb = QgsVectorLayerJoinInfo() symb.setJoinFieldName('id_feature') symb.setTargetFieldName('id') symb.setJoinLayerId(layerToJoin.id()) symb.setUsingMemoryCache(True) symb.setEditable(True) symb.setDynamicFormEnabled(True) symb.setUpsertOnEdit(True) symb.setPrefix('') symb.setJoinFieldNamesSubset([ 'ocultar', 'legenda', 'tamanhotxt', 'justtxt', 'orient_txt', 'orient_simb', 'offset_txt', 'offset_simb', 'prioridade', 'offset_txt_x', 'offset_txt_y' ]) symb.setJoinLayer(layerToJoin) target.addJoin(symb)
def joinTables(self): d, f = self.lyrPair() for k, v in d.items(): target = QgsProject.instance().mapLayer(k) layerToJoin = QgsProject.instance().mapLayer(v) """ # tests for previous joined layers - under research i = QgsProject.instance().mapLayers().values() for layer in i: fh_lyr = layer joinsInfo = fh_lyr.vectorJoins() if joinsInfo != 0: QMessageBox.critical(iface.mainWindow(), "Error", "Previously Joins already exists! Please remove joins and try again.") break # ask for remove previous joins. use removeJoinTables() else: """ # target.removeJoin(layerToJoin.id()) fieldToJoin = QgsProject.instance() symb = QgsVectorLayerJoinInfo() symb.setJoinFieldName('id_feature') symb.setTargetFieldName('id') symb.setJoinLayerId(layerToJoin.id()) symb.setUsingMemoryCache(True) symb.setEditable(True) symb.setDynamicFormEnabled(True) symb.setUpsertOnEdit(True) symb.setPrefix('') symb.setJoinFieldNamesSubset([ 'ocultar', 'legenda', 'tamanhotxt', 'justtxt', 'orient_txt', 'orient_simb', 'offset_txt', 'offset_simb', 'prioridade', 'offset_txt_x', 'offset_txt_y' ]) symb.setJoinLayer(layerToJoin) target.addJoin(symb) layerToJoin.startEditing() target.triggerRepaint()