gault-millau/apps/transfer/serializers/location.py
2019-10-26 09:18:45 +03:00

61 lines
1.6 KiB
Python

from rest_framework import serializers
from location.models import Country, Region
class CountrySerializer(serializers.ModelSerializer):
country_code_2 = serializers.CharField()
class Meta:
model = Country
fields = (
"country_code_2",
)
def validate(self, data):
data["code"] = self.get_country_code(data)
del(data['country_code_2'])
return data
def create(self, validated_data):
# Some countries already in database
country, _ = Country.objects.get_or_create(**validated_data)
return Country
def get_country_code(self, obj):
return obj.get("country_code_2")
class RegionSerializer(serializers.ModelSerializer):
region_code = serializers.CharField()
subregion_code = serializers.CharField(allow_null=True)
country_code_2 = serializers.CharField()
class Meta:
model = Region
fields = (
"region_code",
"country_code_2",
"subregion_code"
)
def validate(self, data):
data['code'] = data.pop('region_code')
try:
country = Country.objects.get(code=data['country_code_2'])
except Exception as e:
raise ValueError(f"{data}: {e}")
data["country"] = country
del (data['country_code_2'])
del(data['subregion_code'])
return data
def create(self, validated_data):
# Some regions may be already in database
try:
region, _ = Region.objects.get_or_create(**validated_data)
except Exception as e:
raise ValueError(f"{validated_data}: {e}")
return region