diff --git a/apps/users/models.py b/apps/users/models.py index 7add8d0..aa47c36 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -11,6 +11,8 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ from rest_framework.exceptions import APIException import uuid + +from .provinces_and_cities import state from .tasks import send_notification from apps.users.constans import MAX_OTP_TRY, DEVELOPMENT_PHONE_NUMBERS @@ -123,6 +125,14 @@ class User(AbstractUser): objects = UserManager() + @property + def city_name(self): + return state.get_city_by_id(self.city) + + @property + def province_name(self): + return state.get_province_by_id(self.province) + def set_otp(self): if settings.DEBUG or self.phone_number in DEVELOPMENT_PHONE_NUMBERS: self.otp = '12345' diff --git a/apps/users/provinces_and_cities.py b/apps/users/provinces_and_cities.py index 89823bc..498efc7 100644 --- a/apps/users/provinces_and_cities.py +++ b/apps/users/provinces_and_cities.py @@ -1316,6 +1316,7 @@ class State: def province_list(self): return self.provinces + # TODO: performance issue def get_city_by_id(self, city_id): for province_id, province in self.provinces.items(): for city in province.get('cities'): @@ -1324,7 +1325,7 @@ class State: return None def get_province_by_id(self, province_id): - return self.provinces.get(province_id).get('name') + return self.provinces.get(province_id, {}).get('name') def validate_city(self, province_id, city_id): cities_id = [item.get('id') for item in self.provinces.get(province_id).get('cities')] diff --git a/apps/users/serializers.py b/apps/users/serializers.py index 5cc12f3..a30ffbb 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -28,11 +28,13 @@ class AccountSerializer(serializers.ModelSerializer): 'iban_verified', # 'country', 'province', + 'province_name', 'city', + 'city_name', 'postal_code', 'address', ) - read_only_fields = ['uuid', 'balance', 'email', 'phone_number', 'iban_verified'] + read_only_fields = ['uuid', 'balance', 'email', 'phone_number', 'iban_verified', 'province_name', 'city_name',] class RequestOTPSerializer(serializers.ModelSerializer):