如何使用国家名称作为默认值而不是 django-countries 包中的代码
how to use country name as default instead of code in django-countries package
我正在使用一个名为 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)
这 return 结果是这样的:
{'AD': 3, 'AR': 5, 'BH': 1, 'FR': 1, 'JP': 1, 'NG': 1, 'NL': 1}
在文档中,他们使用了不同的方法,例如country.name、country.code、country.flag,我试过country.name,因为它与我需要的有关,但是在我的视图中使用 country.name 时出现 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
}
Note: Perhaps a list of tuples would be better for this instead? i.e.
result = [ (Country(code=q['country']), q['number']) for q in qs]
我正在使用一个名为 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)
这 return 结果是这样的:
{'AD': 3, 'AR': 5, 'BH': 1, 'FR': 1, 'JP': 1, 'NG': 1, 'NL': 1}
在文档中,他们使用了不同的方法,例如country.name、country.code、country.flag,我试过country.name,因为它与我需要的有关,但是在我的视图中使用 country.name 时出现 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
}
Note: Perhaps a list of tuples would be better for this instead? i.e.
result = [ (Country(code=q['country']), q['number']) for q in qs]