Code improvement suggestions for cost calculation
The first thing that would benefit this code, beside removing the useless initialization for cost, is to save the models.OperatorCostAsia.objects.filter(country=country_code) queryset for reuse instead of rebuilding it each time. It feels easier to understand and filtering twice is identical to using two parameters in a single filter anyway:

def get_cost_by_location(country_code: str, city=None) -&gt; Optional[models.OperatorCost]:
    asian_country = models.OperatorCostAsia.objects.filter(country=country_code)
    if asian_country.exists():
        cost = asian_country.filter(city__icontains=city).first()
        if cost is None:
            cost = asian_country.first()
    else:
        cost = models.OperatorCost.objects.filter(country=country_code).first()

    return cost




Now there are a few other changes that I would perform but these may change the behavior of the function so it's a bit of guessing territory on how you use this function.

For starter I would use iexact instead of icontains when searching for the city name, it feels less error prone.

Second, I would use .get(...) instead of .filter(...).first() when applicable to check for wrongly constructed inputs that would return more than the one result they are expected to return:

def get_cost_by_location(country_code: str, city=None) -&gt; Optional[models.OperatorCost]:
    asian_country = models.OperatorCostAsia.objects.filter(country=country_code)
    if asian_country.exists():
        try:
            return asian_country.get(city__iexact=city)
        except models.OperatorCostAsia.DoesNotExist:
            return asian_country.first()
    else:
        return models.OperatorCost.objects.get(country=country_code)