Переименование полей сериализатора DRF - PullRequest
0 голосов
/ 22 января 2019

Я использую сериализаторы DRF для проверки входящих данных, которые я получаю из JSON API.Я пытаюсь переименовать некоторые неловко названные поля из ответа, чтобы было проще использовать serializer.data в моем коде.

Данные, полученные из API, выглядят так:

{"FunnyNamedField": true, "AnotherWeirdField": false}

И код обработки:

resp = requests.get([...])
resp.raise_for_status()
ser = MyFunnyDataSerializer(data=resp.json())
if ser.is_valid():
    do_domething_with(ser.data)

Я бы хотел, чтобы сериализатор перевел имена входящих полей в нечто более подходящее.ser.data может выглядеть так: {'funny': True, 'weird': False}.

То, что я пробовал, но не работает, как я надеялся:

class MyFunnyDataSerializer(serializers.Serializer):
    funny = serializers.Booleanfield(source='FunnyNamedField')

Есть ли способ достичь этого, не возвращаясь к SerializerMethodField

1 Ответ

0 голосов
/ 22 января 2019

Вы можете переопределить BaseSerializer для достижения этого:

from rest_framework import serializers

class CustomSerializer(serializers.BaseSerializer):

    def to_representation(self, instance):
        return {
            <datas>
        }

Вы можете внести некоторые конкретные изменения в сериализацию экземпляра с помощью пользовательских методов.

Другим решением может быть написание собственного валидатора для одного поля: Метод валидатора поля .

Таким образом, в этом примере документации вы можете изменить значение перед его возвратом.

from rest_framework import serializers

class BlogPostSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=100)
    content = serializers.CharField()

    def validate_title(self, value):
        """
        Check that the blog post is about Django.
        """
        if 'django' not in value.lower():
            raise serializers.ValidationError("Blog post is not about Django")
        if value == "something":
            value = "something_else"
        return value

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...