diff --git a/apps/location/transfer.py b/apps/location/transfer.py index d44251b0..3c9900f4 100644 --- a/apps/location/transfer.py +++ b/apps/location/transfer.py @@ -99,7 +99,7 @@ card = { "coordinates": (("lat", "latitude"), ("long", "longitude")), "code": "country_code_2", "postal_code": "zip_code", - "is_island": ("is_island", "Boolean") + "is_island": ("is_island", "is_island", "Boolean") }, "relations": { "CityNames": { diff --git a/apps/transfer/utils.py b/apps/transfer/utils.py index 8aa4be63..bf1c7395 100644 --- a/apps/transfer/utils.py +++ b/apps/transfer/utils.py @@ -63,17 +63,48 @@ def transfer_model(model, card): print(f"ERROR: model {model} from {card['app_label']} can not be loaded: {e}") return - querysets = {} + card_fields = card['fields'] + relations = card_fields['relations'] if 'relations' in card_fields else None - for legacy_table, fields in card['fields'].items(): - try: - legacy_model = apps.get_model(app_label="transfer", model_name=legacy_table) - except LookupError as e: - print(f"ERROR: legacy model {model} can not be loaded: {e}") - return + if relations: + del(card_fields['relations']) - print(f"APP MODEL: {app_model}") + if len(card_fields) > 1: + print("You must set one table to transfer") + return - print(f"LEGACY MODEL: {legacy_model}") + legacy_table = list(card_fields.keys())[0] + fields = list(card_fields.values())[0] - print(f"FIELDS: {fields}") + try: + legacy_model = apps.get_model(app_label="transfer", model_name=legacy_table) + except LookupError as e: + print(f"ERROR: legacy model {model} can not be loaded: {e}") + return + + legacy_fields = [] + + for legacy_field in fields.values(): + if isinstance(legacy_field, str): + legacy_fields.append(legacy_field) + + elif isinstance(legacy_field, tuple): + """Группа полей""" + if isinstance(legacy_field[0], tuple): + for legacy_field_group in legacy_field: + legacy_fields.append(legacy_field_group[1]) + else: + legacy_fields.append(legacy_field[1]) + + if model != "City": + return + + print(legacy_fields) + + queryset = legacy_model.objects.only(*legacy_fields) + print(queryset) + + if relations: + for relation_table, relation_data in relations.items(): + print(relation_table) + print(relation_data)