Django国家货币代码

9
我正在使用django_countries显示国家列表。现在,我有一个要求,需要根据国家显示货币。 挪威 - NOK,欧洲和非洲(除英国外)- EUR,英国 - GBP,美洲和亚洲- USD。
能否通过django_countries项目实现此功能?或者在Python或Django中是否有其他软件包可供使用?
也欢迎任何其他解决方案。
--------------------------- 更新 ------------- 在获取了许多解决方案之后,重点是: 挪威 - NOK,欧洲和非洲(除英国外)- EUR,英国 - GBP,美洲和亚洲- USD。 ---------------------------- 解决方案 --------------------------------
我想出的解决方案非常简单,当我意识到无法获得所需的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个回答

16

有几个模块可以使用:

  • pycountry:

    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
    
  • py-moneyed

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

    打印 EUR

  • python-money

    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 现在没有维护。

希望能帮到你。


不用谢。嗯,我认为你不需要特定的模块。pycountry 可以在国家(以及国家的子区域)级别上操作。 - alecxe
好的,事情是这样的,我尝试了你的代码,它在挪威运行良好,但当我将其替换为法国时,它给了我一个错误:u'250' site-packages\pycountry\db.py in get, line 87。无论如何,它并不像我预期的那样工作,因为我现在尝试了印度,但它给出的是INR而不是USD。 - Maverick
是的,这是因为法国没有特定的货币。 "法国法郎" 在2002年被撤回。顺便说一下, "pycountry" 使用 ISO 4217 货币标准。 - alecxe
如何定义法国的货币为 EUR - 这是一个好的开放性问题。 - alecxe
当然,可以查看在线获取货币的服务,例如http://www.webservicex.net/country.asmx。 - alecxe
显示剩余6条评论

3
我刚发布了一个模块,名为 country-currencies,它可以提供国家代码和货币的映射。
>>> from country_currencies import get_by_country
>>> get_by_country('US')
('USD',)
>>> get_by_country('ZW')
('USD', 'ZAR', 'BWP', 'GBP', 'EUR')

3

django-countries只是简单地为您提供了一个可与您的模型耦合的字段(以及一个带有国旗图标的静态包)。该字段可以保存在countries.py列表中的2个字符ISO代码,如果该列表是最新的(未经检查),那么这非常方便,因为它可以节省大量输入。

如果您希望创建具有详细数据的模型,那么这很容易实现,例如:

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)

我不想创建它。如果那是情况的话,那么我就得创建一个长列表。 - Maverick
你可以轻松地编写一个脚本来为你创建比赛场次,这不会超过2分钟的时间。 - Hedde van der Heide
那正是我不明白的地方,怎么做呢? :) - Maverick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接