Fix country queryset
This commit is contained in:
parent
7eb241ffed
commit
0db2638eb8
|
|
@ -44,6 +44,7 @@ class Region(models.Model):
|
||||||
blank=True, default=None, on_delete=models.CASCADE)
|
blank=True, default=None, on_delete=models.CASCADE)
|
||||||
country = models.ForeignKey(
|
country = models.ForeignKey(
|
||||||
Country, verbose_name=_('country'), on_delete=models.CASCADE)
|
Country, verbose_name=_('country'), on_delete=models.CASCADE)
|
||||||
|
old_id = models.IntegerField(null=True, blank=True, default=None)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -77,6 +78,7 @@ class City(models.Model):
|
||||||
_('postal code'), max_length=10, default='', help_text=_('Ex.: 350018'))
|
_('postal code'), max_length=10, default='', help_text=_('Ex.: 350018'))
|
||||||
|
|
||||||
is_island = models.BooleanField(_('is island'), default=False)
|
is_island = models.BooleanField(_('is island'), default=False)
|
||||||
|
old_id = models.IntegerField(null=True, blank=True, default=None)
|
||||||
|
|
||||||
objects = CityQuerySet.as_manager()
|
objects = CityQuerySet.as_manager()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from django.db.models import Q, F
|
from django.db.models import Q, QuerySet
|
||||||
|
|
||||||
from transfer.serializers.location import CountrySerializer, RegionSerializer, CitySerializer
|
from transfer.serializers.location import CountrySerializer, RegionSerializer, CitySerializer
|
||||||
from transfer.models import Cities
|
from transfer.models import Cities
|
||||||
|
|
@ -6,10 +6,18 @@ from pprint import pprint
|
||||||
|
|
||||||
|
|
||||||
def transfer_countries():
|
def transfer_countries():
|
||||||
queryset = Cities.objects.exclude(Q(country_code_2__isnull=True) | Q(country_code_2=""))\
|
# queryset = Cities.objects.exclude(Q(country_code_2__isnull=True) | Q(country_code_2="")) \
|
||||||
.values_list("country_code_2", flat=True).distinct()
|
# .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")
|
||||||
|
|
||||||
serialized_data = CountrySerializer(data=list(queryset.values()), many=True)
|
queryset = [vars(query) for query in queryset]
|
||||||
|
|
||||||
|
serialized_data = CountrySerializer(data=queryset, many=True)
|
||||||
if serialized_data.is_valid():
|
if serialized_data.is_valid():
|
||||||
serialized_data.save()
|
serialized_data.save()
|
||||||
else:
|
else:
|
||||||
|
|
@ -23,7 +31,7 @@ def transfer_regions():
|
||||||
Q(country_code_2__isnull=True) |
|
Q(country_code_2__isnull=True) |
|
||||||
Q(region_code="") |
|
Q(region_code="") |
|
||||||
Q(country_code_2="")).\
|
Q(country_code_2="")).\
|
||||||
values('region_code', 'country_code_2', 'subregion_code').distinct()
|
values('id', 'region_code', 'country_code_2', 'subregion_code').distinct()
|
||||||
|
|
||||||
serialized_without_subregion = RegionSerializer(data=list(regions_without_subregion_queryset.values()), many=True)
|
serialized_without_subregion = RegionSerializer(data=list(regions_without_subregion_queryset.values()), many=True)
|
||||||
if serialized_without_subregion.is_valid():
|
if serialized_without_subregion.is_valid():
|
||||||
|
|
@ -51,7 +59,7 @@ def transfer_cities():
|
||||||
queryset = Cities.objects.exclude(Q(region_code__isnull=True) |
|
queryset = Cities.objects.exclude(Q(region_code__isnull=True) |
|
||||||
Q(country_code_2__isnull=True) |
|
Q(country_code_2__isnull=True) |
|
||||||
Q(region_code="") |
|
Q(region_code="") |
|
||||||
Q(country_code_2="")).only("name", "latitude", "longitude", "subregion_code",
|
Q(country_code_2="")).only("id", "name", "latitude", "longitude", "subregion_code",
|
||||||
"country_code_2", "zip_code", "is_island")
|
"country_code_2", "zip_code", "is_island")
|
||||||
|
|
||||||
serialized_data = CitySerializer(data=list(queryset.values()), many=True)
|
serialized_data = CitySerializer(data=list(queryset.values()), many=True)
|
||||||
|
|
@ -63,10 +71,10 @@ def transfer_cities():
|
||||||
|
|
||||||
data_types = {
|
data_types = {
|
||||||
"dictionaries": [
|
"dictionaries": [
|
||||||
transfer_regions,
|
|
||||||
],
|
],
|
||||||
"tmp": [
|
"tmp": [
|
||||||
transfer_countries,
|
transfer_countries,
|
||||||
|
# transfer_regions,
|
||||||
# transfer_cities
|
# transfer_cities
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class CountrySerializer(serializers.ModelSerializer):
|
||||||
# Some countries already in database
|
# Some countries already in database
|
||||||
try:
|
try:
|
||||||
country = Country.objects.get(code=validated_data['code'])
|
country = Country.objects.get(code=validated_data['code'])
|
||||||
except Country.DoesNotExists:
|
except Country.DoesNotExist:
|
||||||
country = Country.objects.create(**validated_data)
|
country = Country.objects.create(**validated_data)
|
||||||
return country
|
return country
|
||||||
|
|
||||||
|
|
@ -37,13 +37,15 @@ class RegionSerializer(serializers.ModelSerializer):
|
||||||
region_code = serializers.CharField()
|
region_code = serializers.CharField()
|
||||||
subregion_code = serializers.CharField(allow_null=True)
|
subregion_code = serializers.CharField(allow_null=True)
|
||||||
country_code_2 = serializers.CharField()
|
country_code_2 = serializers.CharField()
|
||||||
|
id = serializers.IntegerField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Region
|
model = Region
|
||||||
fields = (
|
fields = (
|
||||||
"region_code",
|
"region_code",
|
||||||
"country_code_2",
|
"country_code_2",
|
||||||
"subregion_code"
|
"subregion_code",
|
||||||
|
"id"
|
||||||
)
|
)
|
||||||
|
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
|
|
@ -67,14 +69,16 @@ class RegionSerializer(serializers.ModelSerializer):
|
||||||
del (data['country_code_2'])
|
del (data['country_code_2'])
|
||||||
del(data['subregion_code'])
|
del(data['subregion_code'])
|
||||||
|
|
||||||
|
data['old_id'] = data.pop("id")
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
# Some regions may be already in database
|
# Some regions may be already in database
|
||||||
try:
|
try:
|
||||||
region, _ = Region.objects.get_or_create(**validated_data)
|
region = Region.objects.get(old_id=validated_data['old_id'])
|
||||||
except Exception as e:
|
except Region.DoesNotExist:
|
||||||
raise ValueError(f"{validated_data}: {e}")
|
region = Region.objects.create(**validated_data)
|
||||||
return region
|
return region
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -84,6 +88,7 @@ class CitySerializer(serializers.ModelSerializer):
|
||||||
zip_code = serializers.CharField()
|
zip_code = serializers.CharField()
|
||||||
is_island = serializers.IntegerField()
|
is_island = serializers.IntegerField()
|
||||||
name = serializers.CharField()
|
name = serializers.CharField()
|
||||||
|
id = serializers.IntegerField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = City
|
model = City
|
||||||
|
|
@ -93,6 +98,7 @@ class CitySerializer(serializers.ModelSerializer):
|
||||||
"zip_code",
|
"zip_code",
|
||||||
"is_island",
|
"is_island",
|
||||||
"name",
|
"name",
|
||||||
|
"id"
|
||||||
)
|
)
|
||||||
|
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
|
|
@ -100,6 +106,7 @@ class CitySerializer(serializers.ModelSerializer):
|
||||||
data = self.set_code(data)
|
data = self.set_code(data)
|
||||||
data = self.set_zip_code(data)
|
data = self.set_zip_code(data)
|
||||||
data = self.set_relations(data)
|
data = self.set_relations(data)
|
||||||
|
data = self.set_old_id(data)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
|
@ -140,3 +147,5 @@ class CitySerializer(serializers.ModelSerializer):
|
||||||
data['postal_code'] = data.pop('zip_code')
|
data['postal_code'] = data.pop('zip_code')
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def set_old_id(self, data):
|
||||||
|
data['old_id'] = data.pop('id')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user