Код валюты стран джанго

Я использую django_countries показать список стран. Теперь у меня есть требование показывать валюту в зависимости от страны. Норвегия - NOK, Европа и Африка (кроме Великобритании) - EUR, Великобритания - GBP, AMERICAS & ASIA - USD.

Может ли это быть достигнуто с помощью проекта django_countries? или есть какие-то другие пакеты в Python или Django, которые я мог бы использовать для этого?

Любое другое решение приветствуется.

--------------------------- ОБНОВЛЕНИЕ ------------- Основной упор делается на это после получения много решений:Norway - NOK, Europe & Afrika (besides UK) - EUR, UK - GBP, AMERICAS & ASIA - USDs.

---------------------------- РЕШЕНИЕ --------------------- -----------

Мое решение было довольно простым, когда я понял, что не могу получить какой-либо формат ISO или пакет, чтобы получить то, что я хочу, я подумал написать свой собственный сценарий. Это просто условная логика:

from incf.countryutils import transformations
def getCurrencyCode(self, countryCode):
        continent = transformations.cca_to_ctn(countryCode)
        # print continent
        if str(countryCode) == 'NO':
            return 'NOK'

        if str(countryCode) == 'GB':
            return 'GBP'

        if (continent == 'Europe') or (continent == 'Africa'):
            return 'EUR'

        return 'USD'

Не знаю, является ли это эффективным способом или нет, хотел бы услышать некоторые предложения.

Спасибо всем!

3 ответа

Решение

Есть несколько модулей:

  • город:

    import pycountry
    
    country = pycountry.countries.get(name='Norway')
    currency = pycountry.currencies.get(numeric=country.numeric)
    
    print currency.alpha_3
    print currency.name
    

    печатает:

    NOK 
    Norwegian Krone
    
  • ру-материальная

    import moneyed
    
    country_name = 'France'
    
    for currency, data in moneyed.CURRENCIES.iteritems():
        if country_name.upper() in data.countries:
            print currency
            break
    

    печать EUR

  • питон-деньги

    import money
    
    country_name = 'France'
    
    for currency, data in money.CURRENCY.iteritems():
        if country_name.upper() in data.countries:
            print currency
            break
    

    печать EUR

pycountry регулярно обновляется, py-moneyed выглядит великолепно и имеет больше возможностей, чем python-moneyплюс python-money не поддерживается сейчас.

Надеюсь, это поможет.

django-countries просто вручает вам поле для привязки к вашей модели (и статический пакет с иконками флагов). Поле может содержать 2-символьный ISO из списка в countries.py что удобно, если этот список обновлен (еще не проверен), потому что он экономит много времени на печатание.

Если вы хотите создать модель с подробными данными, которые легко достижимы, например,

class Country(models.Model):
    iso = CountryField()
    currency = # m2m, fk, char or int field with pre-defined 
               # choices or whatever suits you

>> obj = Country.objects.create(iso='NZ', currency='NZD')
>> obj.iso.code
u'NZ'
>> obj.get_iso_display()
u'New Zealand'
>> obj.currency
u'NZD'

Пример сценария предварительной загрузки данных, который впоследствии можно экспортировать для создания прибора, который является более удобным способом управления образцами данных.

from django_countries.countries import COUNTRIES

for key in dict(COUNTRIES).keys():
    Country.objects.create(iso=key)

Я только что выпустил валюты стран, модуль, который дает вам сопоставление кодов стран с валютами.

>>> from country_currencies import get_by_country
>>> get_by_country('US')
('USD',)
>>> get_by_country('ZW')
('USD', 'ZAR', 'BWP', 'GBP', 'EUR')
Другие вопросы по тегам