You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF中序列化django-countries的CountryField后JSON未显示全部国家怎么办?

解决django-countries CountryField在DRF序列化中未显示所有可用国家的问题

看起来你遇到的问题是默认的CountryField序列化器只会返回当前实例存储的国家值,而不会输出所有可选的国家列表对吧?我来给你几个针对性的解决方案:

方案一:添加所有可用国家的选项列表到响应中

如果你的需求是让API返回所有可选国家(比如给前端做下拉选择用),可以在序列化器里新增一个自定义只读字段,利用django_countries内置的countries对象来获取完整的国家列表:

from django_countries import countries
from django_countries.serializer_fields import CountryField
from rest_framework import serializers
from .models import Location

class LocationsSerializer(serializers.ModelSerializer):
    country = CountryField()
    # 新增字段返回所有可用国家
    available_countries = serializers.SerializerMethodField()

    class Meta:
        model = Location
        fields = ('location_name', 'address', 'city', 'province', 'postal_code', 'country', 'available_countries')

    def get_available_countries(self, obj):
        # 返回包含国家代码和全称的列表,格式可以根据你的需求调整
        return [{'code': code, 'name': name} for code, name in countries]

这样API响应里就会多出一个available_countries字段,里面包含了所有国家的两位代码和对应全称。

方案二:调整单个国家的显示格式

如果你的问题是当前记录的国家只显示两位代码(比如CN),而你希望显示全称(比如China),只需要给CountryField添加display_name=True参数:

class LocationsSerializer(serializers.ModelSerializer):
    # 设置display_name=True,返回国家全称而非代码
    country = CountryField(display_name=True)

    class Meta:
        model = Location
        fields = ('location_name', 'address', 'city', 'province', 'postal_code', 'country')

额外检查点

顺便提一下,你的模型代码里city = models.CharFie...看起来是笔误,记得修正为city = models.CharField(max_length=100),避免模型定义出错影响序列化。

内容的提问来源于stack exchange,提问作者Duncan Wiggill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:15