def alterForm(self, selected_layer): """ Iterate over the fields of the layer and alters the widgets in accordance to the typeName and length. """ not_nullable_columns = self.checkNullableColumns(selected_layer) for field_index, field in enumerate(selected_layer.fields()): f_type = field.typeName() widget_type = QgsEditorWidgetRegistry().findBest( selected_layer, field.displayName()) widget_type_name = QgsEditorWidgetRegistry().findBest( selected_layer, field.displayName()).type() if widget_type_name != 'TextEdit': pass elif f_type == "text": selected_layer.setEditorWidgetSetup(field_index, widget_type) selected_layer.editFormConfig().setWidgetConfig( field.displayName(), { 'IsMultiline': True, 'UseHtml': False }) elif f_type == "varchar": selected_layer.setEditorWidgetSetup(field_index, widget_type) selected_layer.editFormConfig().setWidgetConfig( field.displayName(), { 'IsMultiline': (field.length() > 80), 'UseHtml': False }) elif f_type == "date": selected_layer.setEditorWidgetSetup(field_index, widget_type) selected_layer.editFormConfig().setWidgetConfig( field.displayName(), { 'display_format': 'yyyy-MM-dd', 'field_format': 'yyyy-MM-dd', 'calendar_popup': True }) elif f_type == "bool": selected_layer.setEditorWidgetSetup(field_index, widget_type) selected_layer.editFormConfig().setWidgetConfig( field.displayName(), { 'CheckedState': 't', 'UncheckedState': 'f' }) selected_layer.setFieldConstraint( field_index, not_nullable_columns[field_index])
def handleValueRelations(self, new_layer, ref_native_col_num, ref_foreign_col_num, selected_layer): """ Create a ValueRelation widget from the field numbers for the selected layer """ fields = new_layer.fields() foreign_column = fields[ref_foreign_col_num - 1].name() fields = selected_layer.fields() native_column = fields[ref_native_col_num - 1].name() if native_column and foreign_column: column_index = ref_native_col_num - 1 new_layer_id = new_layer.id() widget_type = QgsEditorWidgetRegistry().findBest( selected_layer, column_index.displayName()) selected_layer.setEditorWidgetSetup(column_index, widget_type) selected_layer.editFormConfig().setWidgetConfig( column_index, { 'Layer': new_layer_id, 'Key': foreign_column, 'Value': foreign_column, "AllowMulti": False, "AllowNull": False, "OrderByValue": True }) # Repeat the entire process for the layer which was just added self.identifyRelations(new_layer) self.alterForm(new_layer)