如何解决如何在 django-countries 包中使用国家/地区名称作为默认名称而不是代码
我正在使用一个名为 django-countries 的 django 包,它使我可以访问世界上的某些国家/地区属性,例如国家/地区名称、国家/地区代码、国家/地区标志和其他一些东西。
似乎默认值似乎是国家/地区代码,我想知道如何使用国家/地区名称而不是默认的国家/地区代码。
models.py
from django.db import models
from django_countries.fields import CountryField
class Product(models.Model):
name = models.CharField(max_length=36)
price = models.PositiveIntegerField()
country = CountryField(blank_label='(select country)')
def analyse_market(request):
qs = Product.objects.values('country').annotate(
number=Count('pk')
).order_by('country')
result = {
q['country']: q['number']
for q in qs
}
print(result)
context = {"result":result}
return render(request,'core/analyse-market.html',context)
这会返回如下结果:
{'AD': 3,'AR': 5,'BH': 1,'FR': 1,'JP': 1,'NG': 1,'NL': 1}
在文档中,他们使用了不同的方法,例如country.name、country.code、country.flag,我尝试了country.name,因为它与我需要的有关,但是在使用country 时出现KeyError。在我看来。
解决方法
来自 django-countries 的 CountryField
只是一个带有选择的 CharField
。当您在字段上使用 values
时,您只需获取存储在数据库中的实际值。你需要把它变成你自己想要的。
要在 views 中执行此操作:
from django_countries import countries
COUNTRY_DICT = dict(countries)
def analyse_market(request):
qs = Product.objects.values('country').annotate(
number=Count('pk')
).order_by('country')
result = {
COUNTRY_DICT[q['country']]: q['number']
for q in qs
}
print(result)
context = {"result":result}
return render(request,'core/analyse-market.html',context)
要在 template 中执行此操作:
{% load countries %}
{% for country_code,number in result.items %}
{% get_country country_code as country %}
Country Name: {{ country.name }}
Number: {{ number }}
{% endfor %}
编辑:如果您想直接从视图中传递 Country
对象,您可以执行以下操作:
from django_countries.fields import Country
result = {
Country(code=q['country']): q['number']
for q in qs
}
注意:也许元组列表会更好?即
result = [ (Country(code=q['country']),q['number']) for q in qs]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。