Сериализатор - не работает дополнительный контекст в Django Rest Framework 3 - PullRequest
0 голосов
/ 05 сентября 2018

В документации говорится:

Вы можете предоставить произвольный дополнительный контекст, передавая аргумент context при создании экземпляра сериализатора.

Хорошо, давайте сделаем это:

serializer = AccountSerializer(account, context={'foo':'bar'})

В документации говорится:

Контекстный словарь можно использовать в любой логике поля сериализатора, обратившись к атрибуту self.context.

Хорошо, давайте сделаем это:

class AccountSerializer(serializers.ModelSerializer):

    custom_field = serializers.SerializerMethodField()

    class Meta:
        model = Account
        fields = ('id', 'name', 'custom_field')

    def get_custom_field(self, obj):
        print('Context:', self.context)
        foo = self.context.get('foo')
        print('Foo:', foo)
        ...
        return "custom data"

Эти операторы печати приводят к:

Context: {'request': <rest_framework.request.Request object at 0x1127d3160>, 'format': None, 'view': <account.api.views.AccountView object at 0x1127c4f98>

Foo: None

Что я здесь не так делаю? Независимо от того, какой контекст не изменен с желаемым дополнительным контекстом.

1 Ответ

0 голосов
/ 05 сентября 2018

Вы показываете результат использования сериализатора в DRF GenericAPIView . Метод get_serializer_context по умолчанию предоставляет контекстные записи 'request', 'view' и 'format', а аргумент context конструктора сериализатора неэффективен. Если вы хотите добавить в контекст больше вещей, вам также нужно переопределить его в представлении :

def get_serializer_context(self):
    context = super().get_serializer_context()
    context['foo'] = 'bar'
    return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...