from django.db.models import Q, QuerySet from transfer.serializers.location import CountrySerializer, RegionSerializer, CitySerializer from transfer.models import Cities from pprint import pprint def transfer_countries(): # queryset = Cities.objects.exclude(Q(country_code_2__isnull=True) | Q(country_code_2="")) \ # .only("id", "country_code_2").annotate(Count("country_code_2")).order_by("country_code_2") queryset = Cities.objects.raw("""SELECT cities.id, cities.country_code_2 FROM cities WHERE NOT ((cities.country_code_2 IS NULL OR (cities.country_code_2 = '' AND cities.country_code_2 IS NOT NULL))) GROUP BY cities.country_code_2""") queryset = [vars(query) for query in queryset] serialized_data = CountrySerializer(data=queryset, many=True) if serialized_data.is_valid(): serialized_data.save() else: pprint(f"Country serializer errors: {serialized_data.errors}") def transfer_regions(): regions_without_subregion_queryset = Cities.objects.raw("""SELECT cities.id, cities.region_code, cities.country_code_2, cities.subregion_code FROM cities WHERE NOT ((cities.subregion_code IS NOT NULL OR cities.region_code IS NULL OR cities.country_code_2 IS NULL OR (cities.region_code = '' AND cities.region_code IS NOT NULL) OR (cities.country_code_2 = '' AND cities.country_code_2 IS NOT NULL))) GROUP BY region_code""") regions_without_subregion_queryset = [vars(query) for query in regions_without_subregion_queryset] serialized_without_subregion = RegionSerializer(data=regions_without_subregion_queryset, many=True) if serialized_without_subregion.is_valid(): serialized_without_subregion.save() else: pprint(f"Parent regions serializer errors: {serialized_without_subregion.errors}") regions_with_subregion_queryset = Cities.objects.raw("""SELECT cities.id, cities.region_code, cities.country_code_2, cities.subregion_code FROM cities WHERE NOT ((cities.subregion_code IS NULL OR (cities.subregion_code = '' OR cities.region_code IS NULL OR cities.country_code_2 IS NULL OR (cities.region_code = '' AND cities.region_code IS NOT NULL) OR (cities.country_code_2 = '' AND cities.country_code_2 IS NOT NULL)))) AND cities.subregion_code in (SELECT region_code FROM cities) GROUP BY region_code""") regions_with_subregion_queryset = [vars(query) for query in regions_with_subregion_queryset] serialized_with_subregion = RegionSerializer(data=regions_with_subregion_queryset, many=True) if serialized_with_subregion.is_valid(): serialized_with_subregion.save() else: pprint(f"Child regions serializer errors: {serialized_with_subregion.errors}") def transfer_cities(): queryset = Cities.objects.exclude(Q(region_code__isnull=True) | Q(country_code_2__isnull=True) | Q(region_code="") | Q(country_code_2="")).only("id", "name", "latitude", "longitude", "subregion_code", "country_code_2", "zip_code", "is_island") serialized_data = CitySerializer(data=list(queryset.values()), many=True) if serialized_data.is_valid(): serialized_data.save() else: pprint(f"City serializer errors: {serialized_data.errors}") data_types = { "dictionaries": [ transfer_countries, ], "tmp": [ transfer_regions, # transfer_cities ] }