2013-07-31 209 views
7

我使用django_countries顯示國家列表。現在,我需要根據國家/地區顯示貨幣。 挪威 - 挪威克朗,歐洲&非洲(除英國外) - 歐元,英國 - 英鎊,美國&亞洲 - 美元。django國家貨幣代碼

這可以通過django_countries項目來實現嗎?或者在python或django中有沒有其他的包,我可以使用它?

任何其他解決方案也歡迎。

--------------------------- UPDATE ------------- 主要重點是在獲得很多解決方案後: Norway - NOK, Europe & Afrika (besides UK) - EUR, UK - GBP, AMERICAS & ASIA - USDs.

---------------------------- SOLUTION ------- -------------------------

我的解決方案很簡單,當我意識到我無法獲得任何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' 

不知道這是否是有效的方式,是否想聽聽一些建議。

謝謝大家!

回答

10

有幾個模塊在那裏:

  • 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現在不維護。

希望有所幫助。

+0

謝謝,看起來很有希望,但會給我根據組的貨幣代碼呢?像歐洲和非洲(除英國外)應該是歐元等等? – Maverick

+0

不客氣。嗯,我不認爲你需要一個特定的模塊。 'pycountry'運行在國家(和國家細分也)層面。 – alecxe

+0

好吧..這是事情,我試過你的代碼,它在挪威工作正常..但是當我用法國代替它時,它給了我一個錯誤:'u'250''site-packages \ pycountry \ db。得到,線87'。無論如何,它不像我預期的那樣工作,因爲我現在與印度一起嘗試過,而不是美元給予印度盧比。 – Maverick

2

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) 
+0

我不想創建它。如果是這種情況,那麼我必須創建一個長列表。 – Maverick

+0

您可以輕鬆編寫一個腳本來爲您創建燈具,這不會花費2分鐘以上。 –

+0

而這恰恰是我無法理解的? :) – Maverick

1

我剛剛發佈了country-currencies,該模塊爲您提供國家代碼到貨幣的映射。

>>> from country_currencies import get_by_country 
>>> get_by_country('US') 
('USD',) 
>>> get_by_country('ZW') 
('USD', 'ZAR', 'BWP', 'GBP', 'EUR')