【问题标题】:Custome the display's field in django REST自定义 django REST 中的显示字段
【发布时间】:2020-01-29 15:04:36
【问题描述】:

我使用 Django REST,我想知道是否可以自定义 json 响应中的属性显示。

示例:

class MyModel(models.Model):
    name = models.CharField(max_length=300)

还有我的序列化器:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['name']

但要查看 {'name' : 'its value'},我会看到 {'My customed model name' : 'its value'}。

你觉得有可能吗?

非常感谢。

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    您可以重写序列化程序的to_representation 方法来更改字段的名称:

    class MyModelSerializer(serializers.ModelSerializer):
        class Meta:
            model = MyModel
            fields = ['name']
    
        def to_representation(self, instance):
            ret = super().to_representation(instance)
            # ret is an OrderedDict, so this will change the order of the result.
            ret['custom_name'] = ret.pop('name')
            return ret
    
        def to_internal_value(self, data):
            # if you want to write to the serializer using your custom name.
            data['name'] = data.pop('custom_name')
            return super().to_internal_value(data)
    

    【讨论】:

    【解决方案2】:

    一种方法是使用SerializerMethodField (https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield)

    class MyModelSerializer(serializers.ModelSerializer):
    
        my_customed_model_name = serializers.SerializerMethodField()
    
        def get_my_customed_model_name(self, obj):
            return obj.name
    
        class Meta:
            model = MyModel
    

    虽然如果您希望字段名称中包含空格,但此解决方案不适用于您。

    【讨论】:

      【解决方案3】:

      你可以这样做

      class MyModelSerializer(serializers.ModelSerializer):
          other_name = serializers.CharField(source='name')
          class Meta:
              model = MyModel
              fields = ['other_name']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 2011-10-25
        • 2021-09-21
        • 2014-08-19
        相关资源
        最近更新 更多