2013-07-31 3 views
7

나는 django_countries을 사용하여 국가 목록을 표시합니다. 이제 저는 국가별로 통화를 보여줄 필요가 있습니다. 노르웨이 - NOK, 유럽 & 아프 리카 (영국 외) - EUR, 영국 - GBP, 아메리카 & 아시아 - USDdjango countries 통화 코드

django_countries 프로젝트를 통해이 작업을 수행 할 수 있습니까? 또는 내가 이것을 사용할 수있는 파이썬이나 장고에 다른 패키지가 있습니까?

다른 해결책도 환영합니다.

--------------------------- 업데이트 ------------- 주된 강조점은 이것에 많은 해결책을 얻은 후에 : 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' 

말라, 이것은 효율적인 방법인지 아닌지를 알고 몇 가지 제안을 듣고 싶습니다 : 그것은 단지 조건부 기반 논리이다.

감사합니다.

답변

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

고마워, 유망 해 보이지만, 나에게 그룹에 따라 통화 코드를 줄까요? 유럽과 Afrika (영국 외)처럼 그것은 EUR이어야합니다. – Maverick

+0

당신은 오신 것을 환영합니다. 음, 필요한 특정 모듈이 하나 있다고 생각하지 않습니다. 'pycountry'는 국가 (및 국가 세분도) 수준에서 작동합니다. – alecxe

+0

음 .. 그 일이있다. 나는 당신의 코드를 시험해 보았다. 노르웨이와 잘 어울린다. 그러나 나는 그것을 프랑스로 바꿨다. 그것은'u'250''' site-packages \ pycountry \ db라는 에러를 내게 주었다. py in get, line 87'. 어쨌든 그것은 내가 인도와 지금 그것을 시험해 보았던 것에 따라 내가 기대했던 방법과 같게 doesnt한다, 그 대신에 INR를주고있는 USD. – 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')