2013-07-31 46 views
7

Tôi đang sử dụng django_countries để hiển thị danh sách các quốc gia. Bây giờ, tôi có một yêu cầu mà tôi cần phải hiển thị tiền tệ theo quốc gia. Na Uy - NOK, Châu Âu & Châu Phi (ngoài Vương quốc Anh) - EUR, Vương quốc Anh - GBP, AMERICAS & Châu Á - USD.mã quốc gia django Mã tiền tệ

Điều này có thể đạt được thông qua dự án django_countries không? hoặc là có bất kỳ gói khác trong python hoặc django mà tôi có thể sử dụng cho điều này?

Bất kỳ giải pháp nào khác cũng được hoan nghênh.

--------------------------- CẬP NHẬT ------------- Sự nhấn mạnh chính là về điều này sau khi nhận được nhiều giải pháp: Norway - NOK, Europe & Afrika (besides UK) - EUR, UK - GBP, AMERICAS & ASIA - USDs.

---------------------------- GIẢI PHÁP ------- -------------------------

Giải pháp của tôi khá đơn giản, khi tôi nhận ra rằng tôi không thể nhận được bất kỳ định dạng ISO nào hoặc gói để nhận những gì tôi muốn, tôi nghĩ để viết kịch bản của riêng tôi. Nó chỉ là một logic dựa trên điều kiện:

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' 

Không biết đây có phải là cách hiệu quả hay không, muốn nghe một số gợi ý.

Cảm ơn tất cả mọi người!

Trả lời

10

Có một số module ra có:

  • pycountry:

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

    in:

    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 
    

    in 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 
    

    in EUR

pycountry được cập nhật thường xuyên, py-moneyed sẽ rất tốt và có nhiều tính năng hơn python-money, cộng với python-money không được duy trì ngay bây giờ.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn, có vẻ đầy hứa hẹn, nhưng điều đó có cho tôi mã tiền tệ theo nhóm không? Giống như châu Âu và châu Phi (ngoài Vương quốc Anh), nó phải là EUR và như vậy? – Maverick

+0

Bạn được chào đón. Mm, tôi không nghĩ có một mô-đun cụ thể mà bạn cần. 'pycountry' hoạt động ở cấp quốc gia (và phân khu quốc gia). – alecxe

+0

Vâng ..đây là điều, tôi đã thử mã của bạn, nó hoạt động tốt với Na Uy .. nhưng khi tôi thay thế nó bằng Pháp, nó đã cho tôi một lỗi: 'u'250''' site-packages \ pycountry \ db. py in get, dòng 87'. Trong bất kỳ trường hợp nào nó không hoạt động như cách tôi mong đợi, như tôi đã thử nó với Ấn Độ, nhưng thay vì USD cho INR của nó. – Maverick

2

django-countries chỉ cần đưa cho bạn một trường để ghép nối với mô hình của bạn (và một gói tĩnh có biểu tượng cờ). Trường có thể chứa ISO 2 ký tự từ danh sách trong countries.py thuận tiện nếu danh sách này được cập nhật (chưa chọn) vì nó tiết kiệm rất nhiều lần nhập.

Nếu bạn muốn tạo mô hình với dữ liệu chi tiết dễ dàng đạt được, ví dụ:

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' 

Một ví dụ về dữ liệu tải trước, sau này có thể được xuất để tạo lịch thi đấu là cách quản lý mẫu đẹp hơn.

from django_countries.countries import COUNTRIES 

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

Tôi không muốn tạo. Nếu đúng như vậy thì tôi phải tạo một danh sách dài. – Maverick

+0

Bạn có thể dễ dàng viết một kịch bản tạo ra các đồ đạc cho bạn, nó sẽ không mất nhiều hơn sau đó 2 phút. –

+0

Và đó chính là điều tôi không thể hiểu được bằng cách nào? :) – Maverick

1

Tôi vừa phát hành country-currencies, một mô-đun cung cấp cho bạn bản đồ mã quốc gia thành tiền tệ.

>>> from country_currencies import get_by_country 
>>> get_by_country('US') 
('USD',) 
>>> get_by_country('ZW') 
('USD', 'ZAR', 'BWP', 'GBP', 'EUR') 
Các vấn đề liên quan