使用功能更改ModelSerializer字段键

时间:2019-07-25 06:06:31

标签: django django-rest-framework django-serializer

对于具有字段“名称”的模型,我有一个简单的Django Rest Framework ModelSerializer。 我想序列化它,所以名称是值,其清除的名称是按以下方式的键:

List<FileConfigData> configList = new List<FileConfigData>();
foreach (var file in fileConfigs){
   var configData = JsonConvert.DeserializeObject<FileConfigData>(File.ReadAllText(CONFIG_FILE_PATH)));
configList.Add(configData);
 }

我目前有:

"results": [
    {
        "mymodel1" : "My Model 1"
    },
    {
        "mymodel2" : "My Model 2"
    }]

返回:

class ModelSimpleSerializer(serializers.ModelSerializer):

  keyname = serializers.SerializerMethodField('get_model_keyname')
  class Meta:
    model = myModel
    fields = (
      'keyname',
    )
  def get_model_keyname(self,obj):
    keyname = obj.name
    keyname = keyname .lower()
    keyname = keyname .replace(" ", "")
    return keyname

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试一下

class ModelSimpleSerializer(serializers.Serializer):
    def to_representation(self, obj):
        keyname = obj.name.lower().replace(" ", "")
        return {
            keyname: obj.name,
        }

请注意,这将是只读的序列化程序。但这会满足您的要求

objects = myModel.objects.all()

ModelSimpleSerializer(objects.first()).data
# {"mymodel1" : "My Model 1"}

ModelSimpleSerializer(objects, many=True).data
# [{"mymodel1" : "My Model 1"}, {"mymodel2" : "My Model 2"}]

答案 1 :(得分:0)

您可以尝试一下

class ModelSimpleSerializer(serializers.ModelSerializer):

      name = serializers.SerializerMethodField()
      class Meta:
        model = myModel
        fields = (
          'name',
        )
      def get_name(self,obj):
        keyname = obj.name
        keyname = keyname .lower()
        keyname = keyname .replace(" ", "")
        return keyname
相关问题