使用函数更改 ModelSerializer 字段键

Change ModelSerializer field key with function

我有一个简单的 Django Rest Framework ModelSerializer,用于具有字段 "name" 的模型。 我想序列化它,所以名称是值,其清理后的名称是以下方式的键:

"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

哪个returns:

"results": [
    {
        "keyname" : "mymodel1"
    },
    {
        "keyname" : "mymodel2"
    }]

有什么想法吗?

谢谢!

你能试试这个吗

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

试试这个

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"}]