diff --git a/addresses/admin.py b/addresses/admin.py index 8c38f3f..0ee1a39 100644 --- a/addresses/admin.py +++ b/addresses/admin.py @@ -1,3 +1,32 @@ from django.contrib import admin +from .models import Address, Province, City -# Register your models here. + +class ProvinceAdmin(admin.ModelAdmin): + model = Province + list_display = ( + "province_name", + "province_id", + ) + +admin.site.register(Province, ProvinceAdmin) + +class CityAdmin(admin.ModelAdmin): + model = City + list_display = ( + "city_name", + "city_local_id", + "province" + ) + +admin.site.register(City, CityAdmin) + +class AddressAdmin(admin.ModelAdmin): + model = Address + list_display = [ + "address_detail", + "province", + "city", + ] + +admin.site.register(Address, AddressAdmin) \ No newline at end of file diff --git a/addresses/api/__init__.py b/addresses/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/addresses/api/serializers.py b/addresses/api/serializers.py new file mode 100644 index 0000000..e882c34 --- /dev/null +++ b/addresses/api/serializers.py @@ -0,0 +1,34 @@ +from rest_framework import serializers +from ..models import Address, City, Province + + +class ProvinceSerializer(serializers.ModelSerializer): + class Meta: + model = Province + fields = ["province_id", "province_name"] + + +class CitySerializer(serializers.ModelSerializer): + province_id = serializers.CharField(source="province.province_id") + class Meta: + model = City + fields = ["city_local_id", "city_name", "province_id"] + +class AddressSerializer(serializers.ModelSerializer): + province_name = serializers.CharField(source="province.province_name", read_only=True) + city_name = serializers.CharField(source="city.city_name", read_only=True) + class Meta: + model = Address + fields = ["province", "province_name", "city", "city_name", "postal_code", "address_detail", "user", "created_at", "updated_at"] + read_only_fields = ["user", "province_name", "city_name", "created_at", "updated_at"] + + def to_representation(self, instance): + rep = super().to_representation(instance) + request = self.context.get("request") + if not request.parser_context.get("kwargs"): + rep.pop("province_name") + rep.pop("city_name") + rep.pop("created_at") + rep.pop("updated_at") + + return rep \ No newline at end of file diff --git a/addresses/api/urls.py b/addresses/api/urls.py new file mode 100644 index 0000000..0e6645c --- /dev/null +++ b/addresses/api/urls.py @@ -0,0 +1,15 @@ +from django.urls import path +from rest_framework.routers import DefaultRouter +from . import views + +app_name = "address-api-urls" + +router = DefaultRouter() +router.register("", views.AddressViewSet, basename="address-viewset") + +urlpatterns = [ + path("province/", views.ProvinceListAPIView.as_view(), name="get-provinces"), + path("province//cities/", views.CityListAPIView.as_view(), name="get-cities") +] + +urlpatterns += router.urls \ No newline at end of file diff --git a/addresses/api/views.py b/addresses/api/views.py new file mode 100644 index 0000000..74cdc33 --- /dev/null +++ b/addresses/api/views.py @@ -0,0 +1,36 @@ +from rest_framework.generics import ListAPIView +from rest_framework import viewsets +from rest_framework.permissions import IsAuthenticated +from . import serializers +from ..models import Province, City, Address + +class ProvinceListAPIView(ListAPIView): + serializer_class = serializers.ProvinceSerializer + queryset = Province.objects.all() + + # def get(self, request, *args, **kwargs): + # return Response() + + +class CityListAPIView(ListAPIView): + serializer_class = serializers.CitySerializer + + def get_queryset(self): + province_id = self.kwargs["province_pk"] + return City.objects.filter(province_id=province_id) + + + +class AddressViewSet(viewsets.ModelViewSet): + permission_classes = [IsAuthenticated,] + serializer_class = serializers.AddressSerializer + + def get_queryset(self): + user_id = self.request.user.id + return Address.objects.filter(user_id=user_id) + + def perform_create(self, serializer): + serializer.save( + user_id=self.request.user.id + ) + return super().perform_create(serializer) \ No newline at end of file diff --git a/addresses/management/__init__.py b/addresses/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/addresses/management/commands/__init__.py b/addresses/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/addresses/management/commands/seed_address.py b/addresses/management/commands/seed_address.py new file mode 100644 index 0000000..fa5cdfb --- /dev/null +++ b/addresses/management/commands/seed_address.py @@ -0,0 +1,41 @@ +from django.core.management.base import BaseCommand #, CommandError +import json +from pathlib import Path +from ...models import Province, City + +class Command(BaseCommand): + help = "push all provinces and cities to database" + + def handle(self, *args, **options): + json_file_path = Path("/app/addresses/provinces_cities.json") + + with open(json_file_path, "r", encoding="utf-8") as json_file: + all_data = json.load(json_file) + + print("injecting all provinces to the database...") + + for province_data in all_data: + province = Province.objects.get_or_create( + province_id=int(province_data.get("provinceId")), + province_name=str(province_data.get("provinceName")), + ) + + print("task complete :)") + + print("injecting all the cities to the database ") + for city_data in all_data: + city = City.objects.get_or_create( + city_local_id=str(city_data.get("cityId")), + city_name=str(city_data.get("cityName")), + province_id=int(city_data.get("provinceId")) + ) + + print("task complete :)") + + self.stdout.write( + self.style.SUCCESS(r"all the data successfully injected in the database :>") + ) + + + + \ No newline at end of file diff --git a/addresses/migrations/0001_initial.py b/addresses/migrations/0001_initial.py new file mode 100644 index 0000000..27c0d7a --- /dev/null +++ b/addresses/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# Generated by Django 5.1.15 on 2026-05-12 23:43 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Province', + fields=[ + ('province_id', models.IntegerField(primary_key=True, serialize=False)), + ('province_name', models.CharField(max_length=255)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='City', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('city_local_id', models.CharField(blank=True, max_length=3, null=True)), + ('city_name', models.CharField(max_length=255)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('province', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='city', to='addresses.province')), + ], + ), + migrations.CreateModel( + name='Address', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('address_detail', models.TextField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('city', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='city', to='addresses.city')), + ('province', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='province', to='addresses.province')), + ], + ), + ] diff --git a/addresses/migrations/0002_address_postal_code.py b/addresses/migrations/0002_address_postal_code.py new file mode 100644 index 0000000..4d8225d --- /dev/null +++ b/addresses/migrations/0002_address_postal_code.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.15 on 2026-05-13 00:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('addresses', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='address', + name='postal_code', + field=models.CharField(max_length=15, null=True), + ), + ] diff --git a/addresses/models.py b/addresses/models.py index 3ef4c52..6ea3ee1 100644 --- a/addresses/models.py +++ b/addresses/models.py @@ -1,5 +1,5 @@ from django.db import models - +from config.settings import AUTH_USER_MODEL class Province(models.Model): province_id = models.IntegerField(primary_key=True) @@ -9,25 +9,27 @@ class Province(models.Model): updated_at = models.DateTimeField(auto_now=True) def __str__(self) -> str: - return f"{self.province_name}" + return f"{self.province_id}: {self.province_name}" class City(models.Model): province = models.ForeignKey("Province", on_delete=models.CASCADE, related_name="city") - city_id = models.IntegerField(primary_key=True) + city_local_id = models.CharField(max_length=3, null=True, blank=True) city_name = models.CharField(max_length=255) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self) -> str: - return f"{self.city_name}" + return f"{self.city_local_id}: {self.city_name}" class Address(models.Model): + user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE) province = models.ForeignKey("Province", on_delete=models.CASCADE, related_name="province") city = models.ForeignKey("City", on_delete=models.CASCADE, related_name="city") + postal_code = models.CharField(max_length=15, null=True) address_detail = models.TextField() created_at = models.DateTimeField(auto_now_add=True) diff --git a/addresses/provinces_cities.json b/addresses/provinces_cities.json new file mode 100644 index 0000000..715b681 --- /dev/null +++ b/addresses/provinces_cities.json @@ -0,0 +1,2689 @@ +[ +{ + "cityId": "01", + "provinceName": "اردبيل", + "cityName": "اردبيل", + "provinceId": "24" +}, +{ + "cityId": "11", + "provinceName": "اردبيل", + "cityName": "اصلاندوز", + "provinceId": "24" +}, +{ + "cityId": "02", + "provinceName": "اردبيل", + "cityName": "بيله سوار", + "provinceId": "24" +}, +{ + "cityId": "06", + "provinceName": "اردبيل", + "cityName": "پارس آباد", + "provinceId": "24" +}, +{ + "cityId": "03", + "provinceName": "اردبيل", + "cityName": "خلخال", + "provinceId": "24" +}, +{ + "cityId": "10", + "provinceName": "اردبيل", + "cityName": "سرعين", + "provinceId": "24" +}, +{ + "cityId": "07", + "provinceName": "اردبيل", + "cityName": "كوثر", + "provinceId": "24" +}, +{ + "cityId": "05", + "provinceName": "اردبيل", + "cityName": "گرمی", + "provinceId": "24" +}, +{ + "cityId": "04", + "provinceName": "اردبيل", + "cityName": "مشگين شهر", + "provinceId": "24" +}, +{ + "cityId": "08", + "provinceName": "اردبيل", + "cityName": "نمين", + "provinceId": "24" +}, +{ + "cityId": "09", + "provinceName": "اردبيل", + "cityName": "نير", + "provinceId": "24" +}, +{ + "cityId": "01", + "provinceName": "اصفهان", + "cityName": "اردستان", + "provinceId": "10" +}, +{ + "cityId": "02", + "provinceName": "اصفهان", + "cityName": "اصفهان", + "provinceId": "10" +}, +{ + "cityId": "18", + "provinceName": "اصفهان", + "cityName": "آران وبيدگل", + "provinceId": "10" +}, +{ + "cityId": "22", + "provinceName": "اصفهان", + "cityName": "برخوار", + "provinceId": "10" +}, +{ + "cityId": "24", + "provinceName": "اصفهان", + "cityName": "بو يين و مياندشت", + "provinceId": "10" +}, +{ + "cityId": "19", + "provinceName": "اصفهان", + "cityName": "تيران وکرون", + "provinceId": "10" +}, +{ + "cityId": "20", + "provinceName": "اصفهان", + "cityName": "چادگان", + "provinceId": "10" +}, +{ + "cityId": "03", + "provinceName": "اصفهان", + "cityName": "خميني شهر", + "provinceId": "10" +}, +{ + "cityId": "04", + "provinceName": "اصفهان", + "cityName": "خوانسار", + "provinceId": "10" +}, +{ + "cityId": "23", + "provinceName": "اصفهان", + "cityName": "خور و بيابانک", + "provinceId": "10" +}, +{ + "cityId": "21", + "provinceName": "اصفهان", + "cityName": "دهاقان", + "provinceId": "10" +}, +{ + "cityId": "05", + "provinceName": "اصفهان", + "cityName": "سميرم", + "provinceId": "10" +}, +{ + "cityId": "16", + "provinceName": "اصفهان", + "cityName": "شاهين شهروميمه", + "provinceId": "10" +}, +{ + "cityId": "09", + "provinceName": "اصفهان", + "cityName": "شهرضا", + "provinceId": "10" +}, +{ + "cityId": "06", + "provinceName": "اصفهان", + "cityName": "فريدن", + "provinceId": "10" +}, +{ + "cityId": "07", + "provinceName": "اصفهان", + "cityName": "فريدونشهر", + "provinceId": "10" +}, +{ + "cityId": "08", + "provinceName": "اصفهان", + "cityName": "فلاورجان", + "provinceId": "10" +}, +{ + "cityId": "10", + "provinceName": "اصفهان", + "cityName": "کاشان", + "provinceId": "10" +}, +{ + "cityId": "11", + "provinceName": "اصفهان", + "cityName": "گلپايگان", + "provinceId": "10" +}, +{ + "cityId": "12", + "provinceName": "اصفهان", + "cityName": "لنجان", + "provinceId": "10" +}, +{ + "cityId": "17", + "provinceName": "اصفهان", + "cityName": "مبارکه", + "provinceId": "10" +}, +{ + "cityId": "13", + "provinceName": "اصفهان", + "cityName": "نايين", + "provinceId": "10" +}, +{ + "cityId": "14", + "provinceName": "اصفهان", + "cityName": "نجف آباد", + "provinceId": "10" +}, +{ + "cityId": "15", + "provinceName": "اصفهان", + "cityName": "نطنز", + "provinceId": "10" +}, +{ + "cityId": "05", + "provinceName": "البرز", + "cityName": "اشتهارد", + "provinceId": "30" +}, +{ + "cityId": "02", + "provinceName": "البرز", + "cityName": "ساوجبلاغ", + "provinceId": "30" +}, +{ + "cityId": "04", + "provinceName": "البرز", + "cityName": "طالقان", + "provinceId": "30" +}, +{ + "cityId": "06", + "provinceName": "البرز", + "cityName": "فرديس", + "provinceId": "30" +}, +{ + "cityId": "01", + "provinceName": "البرز", + "cityName": "کرج", + "provinceId": "30" +}, +{ + "cityId": "03", + "provinceName": "البرز", + "cityName": "نظرآباد", + "provinceId": "30" +}, +{ + "cityId": "01", + "provinceName": "ايلام", + "cityName": "ايلام", + "provinceId": "16" +}, +{ + "cityId": "07", + "provinceName": "ايلام", + "cityName": "ايوان", + "provinceId": "16" +}, +{ + "cityId": "06", + "provinceName": "ايلام", + "cityName": "آبدانان", + "provinceId": "16" +}, +{ + "cityId": "10", + "provinceName": "ايلام", + "cityName": "بدره", + "provinceId": "16" +}, +{ + "cityId": "04", + "provinceName": "ايلام", + "cityName": "چرداول", + "provinceId": "16" +}, +{ + "cityId": "02", + "provinceName": "ايلام", + "cityName": "دره شهر", + "provinceId": "16" +}, +{ + "cityId": "03", + "provinceName": "ايلام", + "cityName": "دهلران", + "provinceId": "16" +}, +{ + "cityId": "09", + "provinceName": "ايلام", + "cityName": "سيروان", + "provinceId": "16" +}, +{ + "cityId": "08", + "provinceName": "ايلام", + "cityName": "ملكشاهی", + "provinceId": "16" +}, +{ + "cityId": "05", + "provinceName": "ايلام", + "cityName": "مهران", + "provinceId": "16" +}, +{ + "cityId": "11", + "provinceName": "ايلام", + "cityName": "هلیلان", + "provinceId": "16" +}, +{ + "cityId": "22", + "provinceName": "آذربايجان شرقی", + "cityName": "اسکو", + "provinceId": "03" +}, +{ + "cityId": "02", + "provinceName": "آذربايجان شرقی", + "cityName": "اهر", + "provinceId": "03" +}, +{ + "cityId": "21", + "provinceName": "آذربايجان شرقی", + "cityName": "آذرشهر", + "provinceId": "03" +}, +{ + "cityId": "13", + "provinceName": "آذربايجان شرقی", + "cityName": "بستان آباد", + "provinceId": "03" +}, +{ + "cityId": "12", + "provinceName": "آذربايجان شرقی", + "cityName": "بناب", + "provinceId": "03" +}, +{ + "cityId": "03", + "provinceName": "آذربايجان شرقی", + "cityName": "تبريز", + "provinceId": "03" +}, +{ + "cityId": "19", + "provinceName": "آذربايجان شرقی", + "cityName": "جلفا", + "provinceId": "03" +}, +{ + "cityId": "23", + "provinceName": "آذربايجان شرقی", + "cityName": "چاراويماق", + "provinceId": "03" +}, +{ + "cityId": "26", + "provinceName": "آذربايجان شرقی", + "cityName": "خداآفرين", + "provinceId": "03" +}, +{ + "cityId": "05", + "provinceName": "آذربايجان شرقی", + "cityName": "سراب", + "provinceId": "03" +}, +{ + "cityId": "14", + "provinceName": "آذربايجان شرقی", + "cityName": "شبستر", + "provinceId": "03" +}, +{ + "cityId": "25", + "provinceName": "آذربايجان شرقی", + "cityName": "عجب شير", + "provinceId": "03" +}, +{ + "cityId": "15", + "provinceName": "آذربايجان شرقی", + "cityName": "کليبر", + "provinceId": "03" +}, +{ + "cityId": "06", + "provinceName": "آذربايجان شرقی", + "cityName": "مراغه", + "provinceId": "03" +}, +{ + "cityId": "07", + "provinceName": "آذربايجان شرقی", + "cityName": "مرند", + "provinceId": "03" +}, +{ + "cityId": "20", + "provinceName": "آذربايجان شرقی", + "cityName": "ملکان", + "provinceId": "03" +}, +{ + "cityId": "10", + "provinceName": "آذربايجان شرقی", + "cityName": "ميانه", + "provinceId": "03" +}, +{ + "cityId": "16", + "provinceName": "آذربايجان شرقی", + "cityName": "هريس", + "provinceId": "03" +}, +{ + "cityId": "11", + "provinceName": "آذربايجان شرقی", + "cityName": "هشترود", + "provinceId": "03" +}, +{ + "cityId": "27", + "provinceName": "آذربايجان شرقی", + "cityName": "هوراند", + "provinceId": "03" +}, +{ + "cityId": "24", + "provinceName": "آذربايجان شرقی", + "cityName": "ورزقان", + "provinceId": "03" +}, +{ + "cityId": "01", + "provinceName": "آذربايجان غربی", + "cityName": "اروميه", + "provinceId": "04" +}, +{ + "cityId": "13", + "provinceName": "آذربايجان غربی", + "cityName": "اشنويه", + "provinceId": "04" +}, +{ + "cityId": "10", + "provinceName": "آذربايجان غربی", + "cityName": "بوكان", + "provinceId": "04" +}, +{ + "cityId": "15", + "provinceName": "آذربايجان غربی", + "cityName": "پلدشت", + "provinceId": "04" +}, +{ + "cityId": "02", + "provinceName": "آذربايجان غربی", + "cityName": "پيرانشهر", + "provinceId": "04" +}, +{ + "cityId": "12", + "provinceName": "آذربايجان غربی", + "cityName": "تكاب", + "provinceId": "04" +}, +{ + "cityId": "14", + "provinceName": "آذربايجان غربی", + "cityName": "چالدران", + "provinceId": "04" +}, +{ + "cityId": "16", + "provinceName": "آذربايجان غربی", + "cityName": "چايپاره", + "provinceId": "04" +}, +{ + "cityId": "03", + "provinceName": "آذربايجان غربی", + "cityName": "خوی", + "provinceId": "04" +}, +{ + "cityId": "04", + "provinceName": "آذربايجان غربی", + "cityName": "سردشت", + "provinceId": "04" +}, +{ + "cityId": "05", + "provinceName": "آذربايجان غربی", + "cityName": "سلماس", + "provinceId": "04" +}, +{ + "cityId": "11", + "provinceName": "آذربايجان غربی", + "cityName": "شاهين دژ", + "provinceId": "04" +}, +{ + "cityId": "17", + "provinceName": "آذربايجان غربی", + "cityName": "شوط", + "provinceId": "04" +}, +{ + "cityId": "06", + "provinceName": "آذربايجان غربی", + "cityName": "ماكو", + "provinceId": "04" +}, +{ + "cityId": "07", + "provinceName": "آذربايجان غربی", + "cityName": "مهاباد", + "provinceId": "04" +}, +{ + "cityId": "08", + "provinceName": "آذربايجان غربی", + "cityName": "مياندوآب", + "provinceId": "04" +}, +{ + "cityId": "09", + "provinceName": "آذربايجان غربی", + "cityName": "نقده", + "provinceId": "04" +}, +{ + "cityId": "01", + "provinceName": "بوشهر", + "cityName": "بوشهر", + "provinceId": "18" +}, +{ + "cityId": "02", + "provinceName": "بوشهر", + "cityName": "تنگستان", + "provinceId": "18" +}, +{ + "cityId": "09", + "provinceName": "بوشهر", + "cityName": "جم", + "provinceId": "18" +}, +{ + "cityId": "03", + "provinceName": "بوشهر", + "cityName": "دشتستان", + "provinceId": "18" +}, +{ + "cityId": "04", + "provinceName": "بوشهر", + "cityName": "دشتی", + "provinceId": "18" +}, +{ + "cityId": "05", + "provinceName": "بوشهر", + "cityName": "دير", + "provinceId": "18" +}, +{ + "cityId": "08", + "provinceName": "بوشهر", + "cityName": "ديلم", + "provinceId": "18" +}, +{ + "cityId": "10", + "provinceName": "بوشهر", + "cityName": "عسلويه", + "provinceId": "18" +}, +{ + "cityId": "06", + "provinceName": "بوشهر", + "cityName": "كنگان", + "provinceId": "18" +}, +{ + "cityId": "07", + "provinceName": "بوشهر", + "cityName": "گناوه", + "provinceId": "18" +}, +{ + "cityId": "10", + "provinceName": "تهران", + "cityName": "اسلامشهر", + "provinceId": "23" +}, +{ + "cityId": "19", + "provinceName": "تهران", + "cityName": "بهارستان", + "provinceId": "23" +}, +{ + "cityId": "13", + "provinceName": "تهران", + "cityName": "پاكدشت", + "provinceId": "23" +}, +{ + "cityId": "20", + "provinceName": "تهران", + "cityName": "پرديس", + "provinceId": "23" +}, +{ + "cityId": "18", + "provinceName": "تهران", + "cityName": "پيشوا", + "provinceId": "23" +}, +{ + "cityId": "01", + "provinceName": "تهران", + "cityName": "تهران", + "provinceId": "23" +}, +{ + "cityId": "02", + "provinceName": "تهران", + "cityName": "دماوند", + "provinceId": "23" +}, +{ + "cityId": "12", + "provinceName": "تهران", + "cityName": "رباط کريم", + "provinceId": "23" +}, +{ + "cityId": "03", + "provinceName": "تهران", + "cityName": "ری", + "provinceId": "23" +}, +{ + "cityId": "04", + "provinceName": "تهران", + "cityName": "شميرانات", + "provinceId": "23" +}, +{ + "cityId": "09", + "provinceName": "تهران", + "cityName": "شهريار", + "provinceId": "23" +}, +{ + "cityId": "14", + "provinceName": "تهران", + "cityName": "فيروزكوه", + "provinceId": "23" +}, +{ + "cityId": "16", + "provinceName": "تهران", + "cityName": "قدس", + "provinceId": "23" +}, +{ + "cityId": "21", + "provinceName": "تهران", + "cityName": "قرچک", + "provinceId": "23" +}, +{ + "cityId": "17", + "provinceName": "تهران", + "cityName": "ملارد", + "provinceId": "23" +}, +{ + "cityId": "06", + "provinceName": "تهران", + "cityName": "ورامين", + "provinceId": "23" +}, +{ + "cityId": "05", + "provinceName": "چهارمحال وبختياری", + "cityName": "اردل", + "provinceId": "14" +}, +{ + "cityId": "01", + "provinceName": "چهارمحال وبختياری", + "cityName": "بروجن", + "provinceId": "14" +}, +{ + "cityId": "09", + "provinceName": "چهارمحال وبختياری", + "cityName": "بن", + "provinceId": "14" +}, +{ + "cityId": "10", + "provinceName": "چهارمحال وبختياری", + "cityName": "خانميرزا", + "provinceId": "14" +}, +{ + "cityId": "08", + "provinceName": "چهارمحال وبختياری", + "cityName": "سامان", + "provinceId": "14" +}, +{ + "cityId": "02", + "provinceName": "چهارمحال وبختياری", + "cityName": "شهرکرد", + "provinceId": "14" +}, +{ + "cityId": "03", + "provinceName": "چهارمحال وبختياری", + "cityName": "فارسان", + "provinceId": "14" +}, +{ + "cityId": "06", + "provinceName": "چهارمحال وبختياری", + "cityName": "کوهرنگ", + "provinceId": "14" +}, +{ + "cityId": "07", + "provinceName": "چهارمحال وبختياری", + "cityName": "کيار", + "provinceId": "14" +}, +{ + "cityId": "04", + "provinceName": "چهارمحال وبختياری", + "cityName": "لردگان", + "provinceId": "14" +}, +{ + "cityId": "08", + "provinceName": "خراسان جنوبی", + "cityName": "بشرويه", + "provinceId": "29" +}, +{ + "cityId": "01", + "provinceName": "خراسان جنوبی", + "cityName": "بيرجند", + "provinceId": "29" +}, +{ + "cityId": "10", + "provinceName": "خراسان جنوبی", + "cityName": "خوسف", + "provinceId": "29" +}, +{ + "cityId": "02", + "provinceName": "خراسان جنوبی", + "cityName": "درميان", + "provinceId": "29" +}, +{ + "cityId": "09", + "provinceName": "خراسان جنوبی", + "cityName": "زيرکوه", + "provinceId": "29" +}, +{ + "cityId": "06", + "provinceName": "خراسان جنوبی", + "cityName": "سرايان", + "provinceId": "29" +}, +{ + "cityId": "03", + "provinceName": "خراسان جنوبی", + "cityName": "سربيشه", + "provinceId": "29" +}, +{ + "cityId": "11", + "provinceName": "خراسان جنوبی", + "cityName": "طبس", + "provinceId": "29" +}, +{ + "cityId": "07", + "provinceName": "خراسان جنوبی", + "cityName": "فردوس", + "provinceId": "29" +}, +{ + "cityId": "04", + "provinceName": "خراسان جنوبی", + "cityName": "قائنات", + "provinceId": "29" +}, +{ + "cityId": "05", + "provinceName": "خراسان جنوبی", + "cityName": "نهبندان", + "provinceId": "29" +}, +{ + "cityId": "37", + "provinceName": "خراسان رضوی", + "cityName": "باخرز", + "provinceId": "09" +}, +{ + "cityId": "31", + "provinceName": "خراسان رضوی", + "cityName": "بجستان", + "provinceId": "09" +}, +{ + "cityId": "23", + "provinceName": "خراسان رضوی", + "cityName": "بردسكن", + "provinceId": "09" +}, +{ + "cityId": "32", + "provinceName": "خراسان رضوی", + "cityName": "بينالود", + "provinceId": "09" +}, +{ + "cityId": "04", + "provinceName": "خراسان رضوی", + "cityName": "تايباد", + "provinceId": "09" +}, +{ + "cityId": "06", + "provinceName": "خراسان رضوی", + "cityName": "تربت جام", + "provinceId": "09" +}, +{ + "cityId": "05", + "provinceName": "خراسان رضوی", + "cityName": "تربت حيدريه", + "provinceId": "09" +}, +{ + "cityId": "34", + "provinceName": "خراسان رضوی", + "cityName": "جغتای", + "provinceId": "09" +}, +{ + "cityId": "36", + "provinceName": "خراسان رضوی", + "cityName": "جوين", + "provinceId": "09" +}, +{ + "cityId": "18", + "provinceName": "خراسان رضوی", + "cityName": "چناران", + "provinceId": "09" +}, +{ + "cityId": "29", + "provinceName": "خراسان رضوی", + "cityName": "خليل آباد", + "provinceId": "09" +}, +{ + "cityId": "19", + "provinceName": "خراسان رضوی", + "cityName": "خواف", + "provinceId": "09" +}, +{ + "cityId": "38", + "provinceName": "خراسان رضوی", + "cityName": "خوشاب", + "provinceId": "09" +}, +{ + "cityId": "39", + "provinceName": "خراسان رضوی", + "cityName": "داورزن", + "provinceId": "09" +}, +{ + "cityId": "07", + "provinceName": "خراسان رضوی", + "cityName": "درگز", + "provinceId": "09" +}, +{ + "cityId": "27", + "provinceName": "خراسان رضوی", + "cityName": "رشتخوار", + "provinceId": "09" +}, +{ + "cityId": "35", + "provinceName": "خراسان رضوی", + "cityName": "زاوه", + "provinceId": "09" +}, +{ + "cityId": "08", + "provinceName": "خراسان رضوی", + "cityName": "سبزوار", + "provinceId": "09" +}, +{ + "cityId": "20", + "provinceName": "خراسان رضوی", + "cityName": "سرخس", + "provinceId": "09" +}, +{ + "cityId": "40", + "provinceName": "خراسان رضوی", + "cityName": "صالح آباد", + "provinceId": "09" +}, +{ + "cityId": "22", + "provinceName": "خراسان رضوی", + "cityName": "فريمان", + "provinceId": "09" +}, +{ + "cityId": "33", + "provinceName": "خراسان رضوی", + "cityName": "فيروزه", + "provinceId": "09" +}, +{ + "cityId": "13", + "provinceName": "خراسان رضوی", + "cityName": "قوچان", + "provinceId": "09" +}, +{ + "cityId": "14", + "provinceName": "خراسان رضوی", + "cityName": "كاشمر", + "provinceId": "09" +}, +{ + "cityId": "28", + "provinceName": "خراسان رضوی", + "cityName": "كلات", + "provinceId": "09" +}, +{ + "cityId": "41", + "provinceName": "خراسان رضوی", + "cityName": "کوهسرخ", + "provinceId": "09" +}, +{ + "cityId": "15", + "provinceName": "خراسان رضوی", + "cityName": "گناباد", + "provinceId": "09" +}, +{ + "cityId": "16", + "provinceName": "خراسان رضوی", + "cityName": "مشهد", + "provinceId": "09" +}, +{ + "cityId": "30", + "provinceName": "خراسان رضوی", + "cityName": "مه ولات", + "provinceId": "09" +}, +{ + "cityId": "17", + "provinceName": "خراسان رضوی", + "cityName": "نيشابور", + "provinceId": "09" +}, +{ + "cityId": "01", + "provinceName": "خراسان شمالی", + "cityName": "اسفراين", + "provinceId": "28" +}, +{ + "cityId": "02", + "provinceName": "خراسان شمالی", + "cityName": "بجنورد", + "provinceId": "28" +}, +{ + "cityId": "03", + "provinceName": "خراسان شمالی", + "cityName": "جاجرم", + "provinceId": "28" +}, +{ + "cityId": "08", + "provinceName": "خراسان شمالی", + "cityName": "راز و جرگلان", + "provinceId": "28" +}, +{ + "cityId": "04", + "provinceName": "خراسان شمالی", + "cityName": "شيروان", + "provinceId": "28" +}, +{ + "cityId": "05", + "provinceName": "خراسان شمالی", + "cityName": "فاروج", + "provinceId": "28" +}, +{ + "cityId": "07", + "provinceName": "خراسان شمالی", + "cityName": "گرمه", + "provinceId": "28" +}, +{ + "cityId": "06", + "provinceName": "خراسان شمالی", + "cityName": "مانه وسملقان", + "provinceId": "28" +}, +{ + "cityId": "16", + "provinceName": "خوزستان", + "cityName": "اميديه", + "provinceId": "06" +}, +{ + "cityId": "21", + "provinceName": "خوزستان", + "cityName": "انديکا", + "provinceId": "06" +}, +{ + "cityId": "02", + "provinceName": "خوزستان", + "cityName": "انديمشک", + "provinceId": "06" +}, +{ + "cityId": "03", + "provinceName": "خوزستان", + "cityName": "اهواز", + "provinceId": "06" +}, +{ + "cityId": "04", + "provinceName": "خوزستان", + "cityName": "ايذه", + "provinceId": "06" +}, +{ + "cityId": "01", + "provinceName": "خوزستان", + "cityName": "آبادان", + "provinceId": "06" +}, +{ + "cityId": "26", + "provinceName": "خوزستان", + "cityName": "آغاجاری", + "provinceId": "06" +}, +{ + "cityId": "15", + "provinceName": "خوزستان", + "cityName": "باغ ملک", + "provinceId": "06" +}, +{ + "cityId": "24", + "provinceName": "خوزستان", + "cityName": "باوی", + "provinceId": "06" +}, +{ + "cityId": "05", + "provinceName": "خوزستان", + "cityName": "بندرماهشهر", + "provinceId": "06" +}, +{ + "cityId": "06", + "provinceName": "خوزستان", + "cityName": "بهبهان", + "provinceId": "06" +}, +{ + "cityId": "25", + "provinceName": "خوزستان", + "cityName": "حميديه", + "provinceId": "06" +}, +{ + "cityId": "07", + "provinceName": "خوزستان", + "cityName": "خرمشهر", + "provinceId": "06" +}, +{ + "cityId": "08", + "provinceName": "خوزستان", + "cityName": "دزفول", + "provinceId": "06" +}, +{ + "cityId": "09", + "provinceName": "خوزستان", + "cityName": "دشت آزادگان", + "provinceId": "06" +}, +{ + "cityId": "19", + "provinceName": "خوزستان", + "cityName": "رامشير", + "provinceId": "06" +}, +{ + "cityId": "10", + "provinceName": "خوزستان", + "cityName": "رامهرمز", + "provinceId": "06" +}, +{ + "cityId": "11", + "provinceName": "خوزستان", + "cityName": "شادگان", + "provinceId": "06" +}, +{ + "cityId": "14", + "provinceName": "خوزستان", + "cityName": "شوش", + "provinceId": "06" +}, +{ + "cityId": "12", + "provinceName": "خوزستان", + "cityName": "شوشتر", + "provinceId": "06" +}, +{ + "cityId": "27", + "provinceName": "خوزستان", + "cityName": "کارون", + "provinceId": "06" +}, +{ + "cityId": "20", + "provinceName": "خوزستان", + "cityName": "گتوند", + "provinceId": "06" +}, +{ + "cityId": "17", + "provinceName": "خوزستان", + "cityName": "لالی", + "provinceId": "06" +}, +{ + "cityId": "13", + "provinceName": "خوزستان", + "cityName": "مسجدسليمان", + "provinceId": "06" +}, +{ + "cityId": "22", + "provinceName": "خوزستان", + "cityName": "هفتکل", + "provinceId": "06" +}, +{ + "cityId": "18", + "provinceName": "خوزستان", + "cityName": "هنديجان", + "provinceId": "06" +}, +{ + "cityId": "23", + "provinceName": "خوزستان", + "cityName": "هويزه", + "provinceId": "06" +}, +{ + "cityId": "01", + "provinceName": "زنجان", + "cityName": "ابهر", + "provinceId": "19" +}, +{ + "cityId": "06", + "provinceName": "زنجان", + "cityName": "ايجرود", + "provinceId": "19" +}, +{ + "cityId": "03", + "provinceName": "زنجان", + "cityName": "خدابنده", + "provinceId": "19" +}, +{ + "cityId": "07", + "provinceName": "زنجان", + "cityName": "خرمدره", + "provinceId": "19" +}, +{ + "cityId": "04", + "provinceName": "زنجان", + "cityName": "زنجان", + "provinceId": "19" +}, +{ + "cityId": "10", + "provinceName": "زنجان", + "cityName": "سلطانيه", + "provinceId": "19" +}, +{ + "cityId": "08", + "provinceName": "زنجان", + "cityName": "طارم", + "provinceId": "19" +}, +{ + "cityId": "09", + "provinceName": "زنجان", + "cityName": "ماهنشان", + "provinceId": "19" +}, +{ + "cityId": "06", + "provinceName": "سمنان", + "cityName": "آرادان", + "provinceId": "20" +}, +{ + "cityId": "01", + "provinceName": "سمنان", + "cityName": "دامغان", + "provinceId": "20" +}, +{ + "cityId": "08", + "provinceName": "سمنان", + "cityName": "سرخه", + "provinceId": "20" +}, +{ + "cityId": "02", + "provinceName": "سمنان", + "cityName": "سمنان", + "provinceId": "20" +}, +{ + "cityId": "03", + "provinceName": "سمنان", + "cityName": "شاهرود", + "provinceId": "20" +}, +{ + "cityId": "04", + "provinceName": "سمنان", + "cityName": "گرمسار", + "provinceId": "20" +}, +{ + "cityId": "05", + "provinceName": "سمنان", + "cityName": "مهدئ شهر", + "provinceId": "20" +}, +{ + "cityId": "07", + "provinceName": "سمنان", + "cityName": "ميامی", + "provinceId": "20" +}, +{ + "cityId": "01", + "provinceName": "سيستان وبلوچستان", + "cityName": "ايرانشهر", + "provinceId": "11" +}, +{ + "cityId": "20", + "provinceName": "سيستان وبلوچستان", + "cityName": "بمپور", + "provinceId": "11" +}, +{ + "cityId": "21", + "provinceName": "سيستان وبلوچستان", + "cityName": "تفتان", + "provinceId": "11" +}, +{ + "cityId": "02", + "provinceName": "سيستان وبلوچستان", + "cityName": "چاه بهار", + "provinceId": "11" +}, +{ + "cityId": "03", + "provinceName": "سيستان وبلوچستان", + "cityName": "خاش", + "provinceId": "11" +}, +{ + "cityId": "22", + "provinceName": "سيستان وبلوچستان", + "cityName": "دشتیاری", + "provinceId": "11" +}, +{ + "cityId": "12", + "provinceName": "سيستان وبلوچستان", + "cityName": "دلگان", + "provinceId": "11" +}, +{ + "cityId": "08", + "provinceName": "سيستان وبلوچستان", + "cityName": "راسک", + "provinceId": "11" +}, +{ + "cityId": "04", + "provinceName": "سيستان وبلوچستان", + "cityName": "زابل", + "provinceId": "11" +}, +{ + "cityId": "05", + "provinceName": "سيستان وبلوچستان", + "cityName": "زاهدان", + "provinceId": "11" +}, +{ + "cityId": "10", + "provinceName": "سيستان وبلوچستان", + "cityName": "زهک", + "provinceId": "11" +}, +{ + "cityId": "06", + "provinceName": "سيستان وبلوچستان", + "cityName": "سراوان", + "provinceId": "11" +}, +{ + "cityId": "23", + "provinceName": "سيستان وبلوچستان", + "cityName": "سرباز", + "provinceId": "11" +}, +{ + "cityId": "14", + "provinceName": "سيستان وبلوچستان", + "cityName": "سيب و سوران", + "provinceId": "11" +}, +{ + "cityId": "19", + "provinceName": "سيستان وبلوچستان", + "cityName": "فنوج", + "provinceId": "11" +}, +{ + "cityId": "18", + "provinceName": "سيستان وبلوچستان", + "cityName": "قصرقند", + "provinceId": "11" +}, +{ + "cityId": "09", + "provinceName": "سيستان وبلوچستان", + "cityName": "کنارک", + "provinceId": "11" +}, +{ + "cityId": "13", + "provinceName": "سيستان وبلوچستان", + "cityName": "مهرستان", + "provinceId": "11" +}, +{ + "cityId": "17", + "provinceName": "سيستان وبلوچستان", + "cityName": "ميرجاوه", + "provinceId": "11" +}, +{ + "cityId": "07", + "provinceName": "سيستان وبلوچستان", + "cityName": "نيک شهر", + "provinceId": "11" +}, +{ + "cityId": "15", + "provinceName": "سيستان وبلوچستان", + "cityName": "نيمروز", + "provinceId": "11" +}, +{ + "cityId": "16", + "provinceName": "سيستان وبلوچستان", + "cityName": "هامون", + "provinceId": "11" +}, +{ + "cityId": "11", + "provinceName": "سيستان وبلوچستان", + "cityName": "هيرمند", + "provinceId": "11" +}, +{ + "cityId": "17", + "provinceName": "فارس", + "cityName": "ارسنجان", + "provinceId": "07" +}, +{ + "cityId": "02", + "provinceName": "فارس", + "cityName": "استهبان", + "provinceId": "07" +}, +{ + "cityId": "03", + "provinceName": "فارس", + "cityName": "اقليد", + "provinceId": "07" +}, +{ + "cityId": "36", + "provinceName": "فارس", + "cityName": "اوز", + "provinceId": "07" +}, +{ + "cityId": "01", + "provinceName": "فارس", + "cityName": "آباده", + "provinceId": "07" +}, +{ + "cityId": "35", + "provinceName": "فارس", + "cityName": "بختگان", + "provinceId": "07" +}, +{ + "cityId": "16", + "provinceName": "فارس", + "cityName": "بوانات", + "provinceId": "07" +}, +{ + "cityId": "31", + "provinceName": "فارس", + "cityName": "بیضا", + "provinceId": "07" +}, +{ + "cityId": "23", + "provinceName": "فارس", + "cityName": "پاسارگاد", + "provinceId": "07" +}, +{ + "cityId": "04", + "provinceName": "فارس", + "cityName": "جهرم", + "provinceId": "07" +}, +{ + "cityId": "29", + "provinceName": "فارس", + "cityName": "خرامه", + "provinceId": "07" +}, +{ + "cityId": "18", + "provinceName": "فارس", + "cityName": "خرم بيد", + "provinceId": "07" +}, +{ + "cityId": "34", + "provinceName": "فارس", + "cityName": "خفر", + "provinceId": "07" +}, +{ + "cityId": "24", + "provinceName": "فارس", + "cityName": "خنج", + "provinceId": "07" +}, +{ + "cityId": "05", + "provinceName": "فارس", + "cityName": "داراب", + "provinceId": "07" +}, +{ + "cityId": "26", + "provinceName": "فارس", + "cityName": "رستم", + "provinceId": "07" +}, +{ + "cityId": "30", + "provinceName": "فارس", + "cityName": "زرقان", + "provinceId": "07" +}, +{ + "cityId": "19", + "provinceName": "فارس", + "cityName": "زرين دشت", + "provinceId": "07" +}, +{ + "cityId": "06", + "provinceName": "فارس", + "cityName": "سپيدان", + "provinceId": "07" +}, +{ + "cityId": "32", + "provinceName": "فارس", + "cityName": "سرچهان", + "provinceId": "07" +}, +{ + "cityId": "25", + "provinceName": "فارس", + "cityName": "سروستان", + "provinceId": "07" +}, +{ + "cityId": "07", + "provinceName": "فارس", + "cityName": "شيراز", + "provinceId": "07" +}, +{ + "cityId": "22", + "provinceName": "فارس", + "cityName": "فراشبند", + "provinceId": "07" +}, +{ + "cityId": "08", + "provinceName": "فارس", + "cityName": "فسا", + "provinceId": "07" +}, +{ + "cityId": "09", + "provinceName": "فارس", + "cityName": "فيروزآباد", + "provinceId": "07" +}, +{ + "cityId": "20", + "provinceName": "فارس", + "cityName": "قيروکارزين", + "provinceId": "07" +}, +{ + "cityId": "10", + "provinceName": "فارس", + "cityName": "کازرون", + "provinceId": "07" +}, +{ + "cityId": "28", + "provinceName": "فارس", + "cityName": "کوار", + "provinceId": "07" +}, +{ + "cityId": "33", + "provinceName": "فارس", + "cityName": "کوه چنار", + "provinceId": "07" +}, +{ + "cityId": "27", + "provinceName": "فارس", + "cityName": "گراش", + "provinceId": "07" +}, +{ + "cityId": "11", + "provinceName": "فارس", + "cityName": "لارستان", + "provinceId": "07" +}, +{ + "cityId": "15", + "provinceName": "فارس", + "cityName": "لامرد", + "provinceId": "07" +}, +{ + "cityId": "12", + "provinceName": "فارس", + "cityName": "مرودشت", + "provinceId": "07" +}, +{ + "cityId": "13", + "provinceName": "فارس", + "cityName": "ممسنی", + "provinceId": "07" +}, +{ + "cityId": "21", + "provinceName": "فارس", + "cityName": "مهر", + "provinceId": "07" +}, +{ + "cityId": "14", + "provinceName": "فارس", + "cityName": "ني ريز", + "provinceId": "07" +}, +{ + "cityId": "05", + "provinceName": "قزوين", + "cityName": "البرز", + "provinceId": "26" +}, +{ + "cityId": "04", + "provinceName": "قزوين", + "cityName": "آبيك", + "provinceId": "26" +}, +{ + "cityId": "06", + "provinceName": "قزوين", + "cityName": "آوج", + "provinceId": "26" +}, +{ + "cityId": "01", + "provinceName": "قزوين", + "cityName": "بوئين زهرا", + "provinceId": "26" +}, +{ + "cityId": "02", + "provinceName": "قزوين", + "cityName": "تاكستان", + "provinceId": "26" +}, +{ + "cityId": "03", + "provinceName": "قزوين", + "cityName": "قزوين", + "provinceId": "26" +}, +{ + "cityId": "01", + "provinceName": "قم", + "cityName": "قم", + "provinceId": "25" +}, +{ + "cityId": "01", + "provinceName": "كردستان", + "cityName": "بانه", + "provinceId": "12" +}, +{ + "cityId": "02", + "provinceName": "كردستان", + "cityName": "بيجار", + "provinceId": "12" +}, +{ + "cityId": "10", + "provinceName": "كردستان", + "cityName": "دهگلان", + "provinceId": "12" +}, +{ + "cityId": "07", + "provinceName": "كردستان", + "cityName": "ديواندره", + "provinceId": "12" +}, +{ + "cityId": "09", + "provinceName": "كردستان", + "cityName": "سروآباد", + "provinceId": "12" +}, +{ + "cityId": "03", + "provinceName": "كردستان", + "cityName": "سقز", + "provinceId": "12" +}, +{ + "cityId": "04", + "provinceName": "كردستان", + "cityName": "سنندج", + "provinceId": "12" +}, +{ + "cityId": "05", + "provinceName": "كردستان", + "cityName": "قروه", + "provinceId": "12" +}, +{ + "cityId": "08", + "provinceName": "كردستان", + "cityName": "كامياران", + "provinceId": "12" +}, +{ + "cityId": "06", + "provinceName": "كردستان", + "cityName": "مريوان", + "provinceId": "12" +}, +{ + "cityId": "23", + "provinceName": "كرمان", + "cityName": "ارزوئيه", + "provinceId": "08" +}, +{ + "cityId": "20", + "provinceName": "كرمان", + "cityName": "انار", + "provinceId": "08" +}, +{ + "cityId": "01", + "provinceName": "كرمان", + "cityName": "بافت", + "provinceId": "08" +}, +{ + "cityId": "10", + "provinceName": "كرمان", + "cityName": "بردسير", + "provinceId": "08" +}, +{ + "cityId": "02", + "provinceName": "كرمان", + "cityName": "بم", + "provinceId": "08" +}, +{ + "cityId": "03", + "provinceName": "كرمان", + "cityName": "جيرفت", + "provinceId": "08" +}, +{ + "cityId": "18", + "provinceName": "كرمان", + "cityName": "رابر", + "provinceId": "08" +}, +{ + "cityId": "11", + "provinceName": "كرمان", + "cityName": "راور", + "provinceId": "08" +}, +{ + "cityId": "04", + "provinceName": "كرمان", + "cityName": "رفسنجان", + "provinceId": "08" +}, +{ + "cityId": "15", + "provinceName": "كرمان", + "cityName": "رودبارجنوب", + "provinceId": "08" +}, +{ + "cityId": "17", + "provinceName": "كرمان", + "cityName": "ريگان", + "provinceId": "08" +}, +{ + "cityId": "05", + "provinceName": "كرمان", + "cityName": "زرند", + "provinceId": "08" +}, +{ + "cityId": "06", + "provinceName": "كرمان", + "cityName": "سيرجان", + "provinceId": "08" +}, +{ + "cityId": "07", + "provinceName": "كرمان", + "cityName": "شهربابك", + "provinceId": "08" +}, +{ + "cityId": "12", + "provinceName": "كرمان", + "cityName": "عنبرآباد", + "provinceId": "08" +}, +{ + "cityId": "22", + "provinceName": "كرمان", + "cityName": "فارياب", + "provinceId": "08" +}, +{ + "cityId": "19", + "provinceName": "كرمان", + "cityName": "فهرج", + "provinceId": "08" +}, +{ + "cityId": "16", + "provinceName": "كرمان", + "cityName": "قلعه گنج", + "provinceId": "08" +}, +{ + "cityId": "08", + "provinceName": "كرمان", + "cityName": "كرمان", + "provinceId": "08" +}, +{ + "cityId": "09", + "provinceName": "كرمان", + "cityName": "كهنوج", + "provinceId": "08" +}, +{ + "cityId": "14", + "provinceName": "كرمان", + "cityName": "كوهبنان", + "provinceId": "08" +}, +{ + "cityId": "13", + "provinceName": "كرمان", + "cityName": "منوجان", + "provinceId": "08" +}, +{ + "cityId": "21", + "provinceName": "كرمان", + "cityName": "نرماشير", + "provinceId": "08" +}, +{ + "cityId": "07", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "باشت", + "provinceId": "17" +}, +{ + "cityId": "05", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "بهمئی", + "provinceId": "17" +}, +{ + "cityId": "01", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "بويراحمد", + "provinceId": "17" +}, +{ + "cityId": "06", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "چرام", + "provinceId": "17" +}, +{ + "cityId": "04", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "دنا", + "provinceId": "17" +}, +{ + "cityId": "02", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "كهگيلويه", + "provinceId": "17" +}, +{ + "cityId": "03", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "گچساران", + "provinceId": "17" +}, +{ + "cityId": "08", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "لنده", + "provinceId": "17" +}, +{ + "cityId": "09", + "provinceName": "كهگيلويه وبويراحمد", + "cityName": "مارگون", + "provinceId": "17" +}, +{ + "cityId": "01", + "provinceName": "کرمانشاه", + "cityName": "اسلام آبادغرب", + "provinceId": "05" +}, +{ + "cityId": "03", + "provinceName": "کرمانشاه", + "cityName": "پاوه", + "provinceId": "05" +}, +{ + "cityId": "12", + "provinceName": "کرمانشاه", + "cityName": "ثلاث باباجانی", + "provinceId": "05" +}, +{ + "cityId": "09", + "provinceName": "کرمانشاه", + "cityName": "جوانرود", + "provinceId": "05" +}, +{ + "cityId": "13", + "provinceName": "کرمانشاه", + "cityName": "دالاهو", + "provinceId": "05" +}, +{ + "cityId": "14", + "provinceName": "کرمانشاه", + "cityName": "روانسر", + "provinceId": "05" +}, +{ + "cityId": "04", + "provinceName": "کرمانشاه", + "cityName": "سرپل ذهاب", + "provinceId": "05" +}, +{ + "cityId": "05", + "provinceName": "کرمانشاه", + "cityName": "سنقر", + "provinceId": "05" +}, +{ + "cityId": "10", + "provinceName": "کرمانشاه", + "cityName": "صحنه", + "provinceId": "05" +}, +{ + "cityId": "06", + "provinceName": "کرمانشاه", + "cityName": "قصرشيرين", + "provinceId": "05" +}, +{ + "cityId": "02", + "provinceName": "کرمانشاه", + "cityName": "کرمانشاه", + "provinceId": "05" +}, +{ + "cityId": "07", + "provinceName": "کرمانشاه", + "cityName": "کنگاور", + "provinceId": "05" +}, +{ + "cityId": "08", + "provinceName": "کرمانشاه", + "cityName": "گيلانغرب", + "provinceId": "05" +}, +{ + "cityId": "11", + "provinceName": "کرمانشاه", + "cityName": "هرسين", + "provinceId": "05" +}, +{ + "cityId": "10", + "provinceName": "گلستان", + "cityName": "آزادشهر", + "provinceId": "27" +}, +{ + "cityId": "08", + "provinceName": "گلستان", + "cityName": "آق قلا", + "provinceId": "27" +}, +{ + "cityId": "01", + "provinceName": "گلستان", + "cityName": "بندرگز", + "provinceId": "27" +}, +{ + "cityId": "02", + "provinceName": "گلستان", + "cityName": "تركمن", + "provinceId": "27" +}, +{ + "cityId": "11", + "provinceName": "گلستان", + "cityName": "راميان", + "provinceId": "27" +}, +{ + "cityId": "03", + "provinceName": "گلستان", + "cityName": "علي آباد کتول", + "provinceId": "27" +}, +{ + "cityId": "04", + "provinceName": "گلستان", + "cityName": "كردكوی", + "provinceId": "27" +}, +{ + "cityId": "09", + "provinceName": "گلستان", + "cityName": "كلاله", + "provinceId": "27" +}, +{ + "cityId": "14", + "provinceName": "گلستان", + "cityName": "گاليكش", + "provinceId": "27" +}, +{ + "cityId": "05", + "provinceName": "گلستان", + "cityName": "گرگان", + "provinceId": "27" +}, +{ + "cityId": "13", + "provinceName": "گلستان", + "cityName": "گميشان", + "provinceId": "27" +}, +{ + "cityId": "06", + "provinceName": "گلستان", + "cityName": "گنبدكاووس", + "provinceId": "27" +}, +{ + "cityId": "12", + "provinceName": "گلستان", + "cityName": "مراوه تپه", + "provinceId": "27" +}, +{ + "cityId": "07", + "provinceName": "گلستان", + "cityName": "مينودشت", + "provinceId": "27" +}, +{ + "cityId": "13", + "provinceName": "گيلان", + "cityName": "املش", + "provinceId": "01" +}, +{ + "cityId": "01", + "provinceName": "گيلان", + "cityName": "آستارا", + "provinceId": "01" +}, +{ + "cityId": "02", + "provinceName": "گيلان", + "cityName": "آستانه اشرفيه", + "provinceId": "01" +}, +{ + "cityId": "03", + "provinceName": "گيلان", + "cityName": "بندرانزلی", + "provinceId": "01" +}, +{ + "cityId": "05", + "provinceName": "گيلان", + "cityName": "رشت", + "provinceId": "01" +}, +{ + "cityId": "14", + "provinceName": "گيلان", + "cityName": "رضوانشهر", + "provinceId": "01" +}, +{ + "cityId": "06", + "provinceName": "گيلان", + "cityName": "رودبار", + "provinceId": "01" +}, +{ + "cityId": "07", + "provinceName": "گيلان", + "cityName": "رودسر", + "provinceId": "01" +}, +{ + "cityId": "15", + "provinceName": "گيلان", + "cityName": "سياهكل", + "provinceId": "01" +}, +{ + "cityId": "12", + "provinceName": "گيلان", + "cityName": "شفت", + "provinceId": "01" +}, +{ + "cityId": "08", + "provinceName": "گيلان", + "cityName": "صومعه سرا", + "provinceId": "01" +}, +{ + "cityId": "04", + "provinceName": "گيلان", + "cityName": "طوالش", + "provinceId": "01" +}, +{ + "cityId": "09", + "provinceName": "گيلان", + "cityName": "فومن", + "provinceId": "01" +}, +{ + "cityId": "11", + "provinceName": "گيلان", + "cityName": "لاهيجان", + "provinceId": "01" +}, +{ + "cityId": "10", + "provinceName": "گيلان", + "cityName": "لنگرود", + "provinceId": "01" +}, +{ + "cityId": "16", + "provinceName": "گيلان", + "cityName": "ماسال", + "provinceId": "01" +}, +{ + "cityId": "07", + "provinceName": "لرستان", + "cityName": "ازنا", + "provinceId": "15" +}, +{ + "cityId": "01", + "provinceName": "لرستان", + "cityName": "اليگودرز", + "provinceId": "15" +}, +{ + "cityId": "02", + "provinceName": "لرستان", + "cityName": "بروجرد", + "provinceId": "15" +}, +{ + "cityId": "08", + "provinceName": "لرستان", + "cityName": "پلدختر", + "provinceId": "15" +}, +{ + "cityId": "10", + "provinceName": "لرستان", + "cityName": "چگنی", + "provinceId": "15" +}, +{ + "cityId": "03", + "provinceName": "لرستان", + "cityName": "خرم آباد", + "provinceId": "15" +}, +{ + "cityId": "04", + "provinceName": "لرستان", + "cityName": "دلفان", + "provinceId": "15" +}, +{ + "cityId": "05", + "provinceName": "لرستان", + "cityName": "دورود", + "provinceId": "15" +}, +{ + "cityId": "11", + "provinceName": "لرستان", + "cityName": "رومشکان", + "provinceId": "15" +}, +{ + "cityId": "09", + "provinceName": "لرستان", + "cityName": "سلسله", + "provinceId": "15" +}, +{ + "cityId": "06", + "provinceName": "لرستان", + "cityName": "کوهدشت", + "provinceId": "15" +}, +{ + "cityId": "01", + "provinceName": "مازندران", + "cityName": "آمل", + "provinceId": "02" +}, +{ + "cityId": "02", + "provinceName": "مازندران", + "cityName": "بابل", + "provinceId": "02" +}, +{ + "cityId": "16", + "provinceName": "مازندران", + "cityName": "بابلسر", + "provinceId": "02" +}, +{ + "cityId": "04", + "provinceName": "مازندران", + "cityName": "بهشهر", + "provinceId": "02" +}, +{ + "cityId": "05", + "provinceName": "مازندران", + "cityName": "تنكابن", + "provinceId": "02" +}, +{ + "cityId": "21", + "provinceName": "مازندران", + "cityName": "جويبار", + "provinceId": "02" +}, +{ + "cityId": "20", + "provinceName": "مازندران", + "cityName": "چالوس", + "provinceId": "02" +}, +{ + "cityId": "06", + "provinceName": "مازندران", + "cityName": "رامسر", + "provinceId": "02" +}, +{ + "cityId": "07", + "provinceName": "مازندران", + "cityName": "ساری", + "provinceId": "02" +}, +{ + "cityId": "08", + "provinceName": "مازندران", + "cityName": "سوادكوه", + "provinceId": "02" +}, +{ + "cityId": "27", + "provinceName": "مازندران", + "cityName": "سوادکوه شمالی", + "provinceId": "02" +}, +{ + "cityId": "26", + "provinceName": "مازندران", + "cityName": "سيمرغ", + "provinceId": "02" +}, +{ + "cityId": "24", + "provinceName": "مازندران", + "cityName": "عباس آباد", + "provinceId": "02" +}, +{ + "cityId": "23", + "provinceName": "مازندران", + "cityName": "فريدونكنار", + "provinceId": "02" +}, +{ + "cityId": "10", + "provinceName": "مازندران", + "cityName": "قائم شهر", + "provinceId": "02" +}, +{ + "cityId": "28", + "provinceName": "مازندران", + "cityName": "کلاردشت", + "provinceId": "02" +}, +{ + "cityId": "22", + "provinceName": "مازندران", + "cityName": "گلوگاه", + "provinceId": "02" +}, +{ + "cityId": "18", + "provinceName": "مازندران", + "cityName": "محمودآباد", + "provinceId": "02" +}, +{ + "cityId": "25", + "provinceName": "مازندران", + "cityName": "مياندورود", + "provinceId": "02" +}, +{ + "cityId": "19", + "provinceName": "مازندران", + "cityName": "نكا", + "provinceId": "02" +}, +{ + "cityId": "14", + "provinceName": "مازندران", + "cityName": "نور", + "provinceId": "02" +}, +{ + "cityId": "15", + "provinceName": "مازندران", + "cityName": "نوشهر", + "provinceId": "02" +}, +{ + "cityId": "01", + "provinceName": "مرکزی", + "cityName": "اراک", + "provinceId": "00" +}, +{ + "cityId": "02", + "provinceName": "مرکزی", + "cityName": "آشتيان", + "provinceId": "00" +}, +{ + "cityId": "03", + "provinceName": "مرکزی", + "cityName": "تفرش", + "provinceId": "00" +}, +{ + "cityId": "04", + "provinceName": "مرکزی", + "cityName": "خمين", + "provinceId": "00" +}, +{ + "cityId": "12", + "provinceName": "مرکزی", + "cityName": "خنداب", + "provinceId": "00" +}, +{ + "cityId": "05", + "provinceName": "مرکزی", + "cityName": "دليجان", + "provinceId": "00" +}, +{ + "cityId": "10", + "provinceName": "مرکزی", + "cityName": "زرنديه", + "provinceId": "00" +}, +{ + "cityId": "06", + "provinceName": "مرکزی", + "cityName": "ساوه", + "provinceId": "00" +}, +{ + "cityId": "07", + "provinceName": "مرکزی", + "cityName": "شازند", + "provinceId": "00" +}, +{ + "cityId": "13", + "provinceName": "مرکزی", + "cityName": "فراهان", + "provinceId": "00" +}, +{ + "cityId": "11", + "provinceName": "مرکزی", + "cityName": "کميجان", + "provinceId": "00" +}, +{ + "cityId": "09", + "provinceName": "مرکزی", + "cityName": "محلات", + "provinceId": "00" +}, +{ + "cityId": "01", + "provinceName": "هرمزگان", + "cityName": "ابوموسی", + "provinceId": "22" +}, +{ + "cityId": "09", + "provinceName": "هرمزگان", + "cityName": "بستك", + "provinceId": "22" +}, +{ + "cityId": "13", + "provinceName": "هرمزگان", + "cityName": "بشاگرد", + "provinceId": "22" +}, +{ + "cityId": "02", + "provinceName": "هرمزگان", + "cityName": "بندرعباس", + "provinceId": "22" +}, +{ + "cityId": "03", + "provinceName": "هرمزگان", + "cityName": "بندرلنگه", + "provinceId": "22" +}, +{ + "cityId": "11", + "provinceName": "هرمزگان", + "cityName": "پارسيان", + "provinceId": "22" +}, +{ + "cityId": "06", + "provinceName": "هرمزگان", + "cityName": "جاسك", + "provinceId": "22" +}, +{ + "cityId": "08", + "provinceName": "هرمزگان", + "cityName": "حاجي اباد", + "provinceId": "22" +}, +{ + "cityId": "10", + "provinceName": "هرمزگان", + "cityName": "خمير", + "provinceId": "22" +}, +{ + "cityId": "07", + "provinceName": "هرمزگان", + "cityName": "رودان", + "provinceId": "22" +}, +{ + "cityId": "12", + "provinceName": "هرمزگان", + "cityName": "سيريك", + "provinceId": "22" +}, +{ + "cityId": "04", + "provinceName": "هرمزگان", + "cityName": "قشم", + "provinceId": "22" +}, +{ + "cityId": "05", + "provinceName": "هرمزگان", + "cityName": "ميناب", + "provinceId": "22" +}, +{ + "cityId": "06", + "provinceName": "همدان", + "cityName": "اسدآباد", + "provinceId": "13" +}, +{ + "cityId": "07", + "provinceName": "همدان", + "cityName": "بهار", + "provinceId": "13" +}, +{ + "cityId": "01", + "provinceName": "همدان", + "cityName": "تويسركان", + "provinceId": "13" +}, +{ + "cityId": "10", + "provinceName": "همدان", + "cityName": "درگزین", + "provinceId": "13" +}, +{ + "cityId": "08", + "provinceName": "همدان", + "cityName": "رزن", + "provinceId": "13" +}, +{ + "cityId": "09", + "provinceName": "همدان", + "cityName": "فامنين", + "provinceId": "13" +}, +{ + "cityId": "05", + "provinceName": "همدان", + "cityName": "كبودرآهنگ", + "provinceId": "13" +}, +{ + "cityId": "02", + "provinceName": "همدان", + "cityName": "ملاير", + "provinceId": "13" +}, +{ + "cityId": "03", + "provinceName": "همدان", + "cityName": "نهاوند", + "provinceId": "13" +}, +{ + "cityId": "04", + "provinceName": "همدان", + "cityName": "همدان", + "provinceId": "13" +}, +{ + "cityId": "07", + "provinceName": "يزد", + "cityName": "ابركوه", + "provinceId": "21" +}, +{ + "cityId": "01", + "provinceName": "يزد", + "cityName": "اردكان", + "provinceId": "21" +}, +{ + "cityId": "08", + "provinceName": "يزد", + "cityName": "اشکذر", + "provinceId": "21" +}, +{ + "cityId": "02", + "provinceName": "يزد", + "cityName": "بافق", + "provinceId": "21" +}, +{ + "cityId": "11", + "provinceName": "يزد", + "cityName": "بهاباد", + "provinceId": "21" +}, +{ + "cityId": "03", + "provinceName": "يزد", + "cityName": "تفت", + "provinceId": "21" +}, +{ + "cityId": "09", + "provinceName": "يزد", + "cityName": "خاتم", + "provinceId": "21" +}, +{ + "cityId": "04", + "provinceName": "يزد", + "cityName": "مهريز", + "provinceId": "21" +}, +{ + "cityId": "06", + "provinceName": "يزد", + "cityName": "ميبد", + "provinceId": "21" +}, +{ + "cityId": "05", + "provinceName": "يزد", + "cityName": "يزد", + "provinceId": "21" +}] diff --git a/addresses/urls.py b/addresses/urls.py new file mode 100644 index 0000000..68ad372 --- /dev/null +++ b/addresses/urls.py @@ -0,0 +1,7 @@ +from django.urls import path, include + +app_name = "addresses" + +urlpatterns = [ + path("", include("addresses.api.urls"), name="address-api") +] \ No newline at end of file diff --git a/celerybeat-schedule b/celerybeat-schedule index 0c013ab..785d55d 100644 Binary files a/celerybeat-schedule and b/celerybeat-schedule differ diff --git a/config/settings.py b/config/settings.py index 7db54f8..4cb3c31 100644 --- a/config/settings.py +++ b/config/settings.py @@ -63,6 +63,7 @@ INSTALLED_APPS = [ "drf_spectacular", "drf_spectacular_sidecar", "corsheaders", + "addresses", ] MIDDLEWARE = [ diff --git a/config/urls.py b/config/urls.py index 44f71ca..0c8fea4 100644 --- a/config/urls.py +++ b/config/urls.py @@ -3,6 +3,7 @@ from django.urls import include, path from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView urlpatterns = [ + path("api-auth/", include("rest_framework.urls")), path("admin/", admin.site.urls), path("api/schema/", SpectacularAPIView.as_view(), name="schema"), path("api/docs/swagger/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger-ui"), @@ -41,4 +42,5 @@ urlpatterns = [ path("api/farmer-todos/", include("farmer_todos.urls")), path("api/sensor-external-api/", include("device_hub.sensor_external_api_urls")), + path("api/address/", include("addresses.urls")) ]