django_countries获取国家三元代码时alpha3属性报错解决方法
问题原因
直接遍历from django_countries import countries导入的countries实例时,迭代返回的每个元素是(两位alpha2国家代码, 国家名称)格式的普通二元元组,不是带.name、.alpha3属性的实体对象,调用.alpha3自然会报属性不存在的错误。
正确写法
二选一即可:
- 写法1:用内置映射直接取三位码,不用额外导包,性能最好
from django_countries import countries def populate_countries(): for alpha2_code, country_name in countries: alpha3_code = countries.alpha3[alpha2_code] Country.objects.get_or_create( country_name=country_name, country_code=alpha3_code )
- 写法2:实例化官方Country对象拿属性,适合后续还要取国家其他扩展属性的场景
from django_countries import countries from django_countries.fields import Country as DCountry def populate_countries(): for alpha2_code, _ in countries: country_obj = DCountry(alpha2_code) Country.objects.get_or_create( country_name=country_obj.name, country_code=country_obj.alpha3 )
别多此一举写
list(countries)强转,转成普通列表后所有元素都是原生元组,会丢失django_countries封装的扩展查询能力。
内容的提问来源于stack exchange,提问作者Khan Khan
相关产品推荐
相关产品推荐

