Пользовательское поле дисплея в django REST - PullRequest
0 голосов
/ 29 января 2020

Я использую Django REST, и я бы знал, можно ли настроить отображение атрибутов в ответе json.

Пример:

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

и мой сериализатор:

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

Но вместо того, чтобы увидеть {'name': 'его значение'}, я бы увидел {' Мое привычное название модели ':' его стоимость '}.

Как вы думаете, возможно ли это?

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 29 января 2020

Вы можете переопределить метод 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)
0 голосов
/ 29 января 2020

Вы можете сделать это следующим образом

class MyModelSerializer(serializers.ModelSerializer):
    other_name = serializers.CharField(source='name')
    class Meta:
        model = MyModel
        fields = ['other_name']
0 голосов
/ 29 января 2020

Один из способов сделать это - использовать 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

Хотя, если вы хотите, чтобы в имени поля были пробелы, это решение не будет работать для вас.

...