如何在django中更改序列化程序中的字段名称

Har*_*man 8 serialization django-rest-framework

我有一个字段country_id和country_name,我想在Django rest Framework中更改这两个字段的名称

现在写我正在收到这些数据

{
  "data": [
    {
      "country_id": 1,
      "country_name": "Afghanistan"
    },
    {
      "country_id": 2,
      "country_name": "Aland Islands"
    } 
  ]
}
Run Code Online (Sandbox Code Playgroud)

我在serializers.py文件中有变化,但对我不起作用

serializers.py

class CountrySerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField('country_name')
    class Meta:
        model = Country
        fields = ('country_id', 'name')
Run Code Online (Sandbox Code Playgroud)

在模型中

class Country(models.Model):
    country_id = models.AutoField(primary_key = True)
    country_name = models.CharField(max_length = 128)

    class Meta:
        db_table = 'countries'
Run Code Online (Sandbox Code Playgroud)

我想要这些数据

 {
      "data": [
        {
          "id": 1,
          "name": "Afghanistan"
        },
        {
          "id": 2,
          "name": "Aland Islands"
        }
      ]
    }
Run Code Online (Sandbox Code Playgroud)

得到此错误:/ v1/location/countries /上的AttributeError'CountrySerializer'对象没有属性'country_name'

Jas*_*jal 10

您必须更改"serializers.py"文件

class CountrySerializer(serializers.ModelSerializer):
    name = serializers.CharField(source='country_name')
    id = serializers.CharField(source='country_id')
    class Meta:
        model = Country
        fields = ('id', 'name')
Run Code Online (Sandbox Code Playgroud)

然后你会得到这样的数据

 {
      "data": [
        {
          "id": 1,
          "name": "Afghanistan"
        },
        {
          "id": 2,
          "name": "Aland Islands"
        }
      ]
    }
Run Code Online (Sandbox Code Playgroud)