get_FIELD_serializer в Django Rest Framework - PullRequest
0 голосов
/ 20 июня 2019

Я нахожусь в ситуации, когда я хочу изменить поле сериализатора в зависимости от условия. Неважно, где возникает условие, но я хочу иметь возможность переключаться между полями сериализатора, как показано в следующем примере:

class EntrySerializer(serializers.ModelSerializer):
    # author defined from ModelSerializer

    def get_author_serializer(self):
        request = self.context.get('request')
        GET = getattr(request, 'GET', {})
        if request and GET and GET.get('include_author')=='true':
            author_serializer = UserSerializer()
        else:
            author_serializer = serializers.PrimaryKeyRelatedField(
                read_only=True, default=serializers.CurrentUserDefault()
            )
        return author_serialize

Конечно, это не работает, потому что get_FIELD_serializer не существует, но я ищу простейшее решение, которое может это сделать.

Я пытался написать author как свойство в наивной попытке, но это не сработало.

Мне известно, что я могу написать несколько EntrySerializer и использовать get_serializer_class, но это слишком много стандартного кода для такой небольшой настройки.

1 Ответ

0 голосов
/ 20 июня 2019

Если вы просто хотите изменить поле сериализатора на основе условия, вы можете сделать что-то вроде этого.

class MySerializer(serializers.ModelSerializer):
    author = serializers.SerializerMethodField()

    def get_author(self, instance):
        # your condition here
        if your_condition:
            return instance.author
        return 'hello'

Проверьте документы для SerializerMethodField

https://www.django -rest-framework.org / апи-гид / поля / # serializermethodfield

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