Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django countries包中使用国家名称作为默认值而不是代码_Python_Django_Django Models_Django Views_Django Countries - Fatal编程技术网

Python 如何在django countries包中使用国家名称作为默认值而不是代码

Python 如何在django countries包中使用国家名称作为默认值而不是代码,python,django,django-models,django-views,django-countries,Python,Django,Django Models,Django Views,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

我正在使用一个名为的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.name时,我得到了keyrerror。

来自django countries的
CountryField
只是一个有选择的
CharField
。在字段上使用
值时,只需获取存储在数据库中的实际值即可。你需要把它变成你自己想要的

要在中执行此操作,请执行以下操作:

要在中执行此操作,请执行以下操作:

编辑:如果要从视图中直接传递
国家
对象,可以执行以下操作:

from django_countries.fields import Country

result = {
    Country(code=q['country']): q['number']
    for q in qs
}
注意:也许一个元组列表会更好?i、 e

result = [ (Country(code=q['country']), q['number']) for q in qs]

django国家的
CountryField
只是一个带有选项的
CharField
。在字段上使用
值时,只需获取存储在数据库中的实际值即可。你需要把它变成你自己想要的

要在中执行此操作,请执行以下操作:

要在中执行此操作,请执行以下操作:

编辑:如果要从视图中直接传递
国家
对象,可以执行以下操作:

from django_countries.fields import Country

result = {
    Country(code=q['country']): q['number']
    for q in qs
}
注意:也许一个元组列表会更好?i、 e

result = [ (Country(code=q['country']), q['number']) for q in qs]


您可能需要类似于
Product.objects.values('country\u name').annotate(
)的内容来从国家/地区模型获取属性。您能在相关的位置显示models.py代码吗?@AMG.我在尝试您的解决方案后出现此错误,“django.core.exceptions.FieldError:无法将关键字'name'解析为字段。不允许加入'country'”@AlexKim我已编辑了问题并添加了模型。您可能需要类似于
Product.objects.values('country_uname')的内容。注释(
若要从国家/地区模型获取属性,请将models.py代码显示在相关位置好吗?@AMG。我在尝试解决方案后出现此错误,“django.core.exceptions.FieldError:无法将关键字“name”解析到字段中。不允许加入“country”@AlexKim我已经编辑了问题并添加了模型。谢谢,先生,它解决了我的问题。我尝试了自己的模板,但我得到了这个“国家名称:编号:3国家名称:编号:5国家名称:编号:1国家名称:编号:1国家名称:编号:1”我注意到国家名称是空的,为什么是空的?如果需要,我如何获得国家的国旗属性that@coderboy您可以使用视图中的代码或模板中的代码。
COUNTRY_DICT[q['COUNTRY']]
已将国家代码转换为国家名称,因此如果您将其传递到模板标签
get_country
,它将不会向您返回任何结果。哦,我现在更了解了。谢谢先生,它解决了我的问题我尝试了自己的模板,但我得到了这个结果“国家名称:编号:3国家名称:编号:5国家名称:编号:1国家名称:编号:1国家名称:编号:1国家名称:编号:1国家名称:编号:1国家名称:编号:1国家名称:编号:1“我注意到国家名称是空白的,这是为什么?如果需要,我如何获得国家的国旗属性that@coderboy您可以使用视图中的代码或模板中的代码。
COUNTRY_DICT[q['COUNTRY']]
已经将国家代码转换为国家名称,因此如果您将其传递到模板标签
get_country
它将不会向您返回任何结果。哦,我现在更了解了。