首页 > 解决方案 > 使用函数更改 ModelSerializer 字段键

问题描述

我有一个简单的 Django Rest Framework ModelSerializer 用于具有字段“名称”的模型。我想对其进行序列化,因此名称是值,其清理后的名称是以下方式的键:

"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

返回:

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

有任何想法吗?

谢谢!

标签: djangodjango-rest-frameworkdjango-serializer

解决方案


尝试这个

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

推荐阅读