This will automatically refactor fields accouring to the current order of the attribute table: <!-- language: python --> layer = QgsProject.instance().mapLayersByName("points")[0] #Change points to the name of your layer #Create a dictionary of current field order and the field properties: default_fields = {f.name():{'expression':f.name(),'length':f.length(),'name':f.name(),'precision':f.precision(),'sub_type':f.subType(),'type':f.type(),'type_name':f.typeName()} for f in layer.fields()} #For example to get the properties of the KKOD field: #default_fields['KKOD'] #{'expression': 'KKOD', 'length': 5, 'name': 'KKOD', 'precision': 0, 'sub_type': 0, 'type': 2, 'type_name': 'Integer'} #Find the current field order accourding to the attribute table configuration: tableconfig = layer.attributeTableConfig() new_field_order = [c.name for c in tableconfig.columns()] #The current order in the attribute table #Remap the fields newfieldmap = [default_fields[newfield] for newfield in new_field_order if newfield in default_fields] processing.runAndLoadResults("native:refactorfields", {'INPUT':layer, 'FIELDS_MAPPING':newfieldmap,'OUTPUT':'TEMPORARY_OUTPUT'}) [![enter image description here][1]][1] [1]: https://i.sstatic.net/mINmS.png