2013-07-31 9 views
7

Sto usando django_countries per mostrare l'elenco dei paesi. Ora, ho un requisito in cui ho bisogno di mostrare la valuta in base al paese. Norvegia - NOK, Europa & Afrika (oltre Regno Unito) - EUR, UK - GBP, AMERICAS & ASIA - USD.django countries codice di valuta

Questo può essere ottenuto tramite il progetto django_countries? o ci sono altri pacchetti in python o django che potrei usare per questo?

Qualsiasi altra soluzione è benvenuta.

--------------------------- UPDATE ------------- L'enfasi principale è su questo dopo aver ottenuto molte soluzioni: Norway - NOK, Europe & Afrika (besides UK) - EUR, UK - GBP, AMERICAS & ASIA - USDs.

---------------------------- SOLUZIONE ------- -------------------------

La mia soluzione era abbastanza semplice, quando ho capito che non potevo ottenere alcun formato ISO o un pacchetto per ottenere quello che voglio, ho pensato di scrivere la mia sceneggiatura. È solo una logica condizionale:

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' 

Non so se questo è un modo efficace o meno, vorrei sentire alcuni suggerimenti.

Grazie a tutti!

risposta

10

Ci sono diversi moduli là fuori:

  • pycountry:

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

    stampe:

    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 
    

    stampe 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 
    

    stampe EUR

pycountry viene regolarmente aggiornato, py-moneyed sembra grande e ha più funzioni rispetto python-money, più python-money non viene aggiornato ora.

Spero che questo aiuti.

+0

Grazie, sembra promettente, ma mi darebbe anche il codice valuta in base al gruppo? Come Europa e Africa (oltre al Regno Unito) dovrebbe essere EUR e così via? – Maverick

+0

Prego. Non penso che ci sia un particolare modulo di cui hai bisogno. 'pycountry' opera anche a livello di paese (e di suddivisioni per paese). – alecxe

+0

Beh, c'è qualcosa, ho provato il tuo codice, funziona bene con la Norvegia ... ma quando l'ho sostituito con la Francia, mi ha dato un errore: 'u'250''' site-packages \ pycountry \ db. py in get, line 87'. In ogni caso, non funziona come mi aspettavo, dato che l'ho provato ora con l'India, ma invece dell'USD che dà l'INR. – Maverick

2

django-countries solo le mani un campo da abbinare al modello (e un pacchetto statico con icone di bandiera). Il campo può contenere un ISO di 2 caratteri dall'elenco in countries.py che è conveniente se questo elenco è aggiornato (non è stato controllato) perché consente di risparmiare un sacco di digitazione.

Se si desidera creare un modello con dati dettagliati facilmente ottenibile, ad es.

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' 

Un esempio di script di dati di precarico, che possono successivamente essere esportati per creare un dispositivo che è un modo migliore di gestire dati campione.

from django_countries.countries import COUNTRIES 

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

Non voglio crearlo. Se è così, allora devo creare una lunga lista. – Maverick

+0

Potresti scrivere facilmente uno script che crea le fixture per te, non ci vorranno più di 2 minuti. –

+0

E questo è esattamente quello che non sono in grado di capire come? :) – Maverick

1

Ho appena rilasciato country-currencies, un modulo che fornisce una mappatura dei codici Paese alle valute.

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