Serializer.data дает старые значения, новые видны в сериализаторе в DRF

Я написал пользовательскую функцию perform_update(self, serializer) в ViewSet, но у меня возникают проблемы с обновлением данных. В приведенном ниже коде я вижу, что словарь data={} содержит старые значения (которые уже находятся в БД), в то время как вторая печать показывает данные в том виде, в котором они были опубликованы. Может ли кто-нибудь объяснить, как я могу использовать обновленные данные и почему старые данные отображаются в serializer.data? (См. разницу между значениями 'source' и 'verwerking' в двух распечатках)

class RegisterlineViewSet(viewsets.ModelViewSet):
    queryset = Registerline.objects.all()
    serializer_class = RegisterlineSerializer
    permission_classes = [permissions.IsAuthenticated]
...

    def perform_update(self, serializer):
        print(serializer.data)
        print(serializer)

Результат:

{'id': 4, 'external_reference': OrderedDict([('source', '7777777'), ('sourcekey', '77777'), ('last_updated', None)]), 'verwerking': '', 'applicatienaam': ...
RegisterlineSerializer(<Registerline: @ [4]>, context={'request': <rest_framework.request.Request: PATCH '/api/registerline/4/'>, 'format': None, 'view': <core.views.RegisterlineViewSet object>}, data={'id': 4, 'external_reference': {'source': '7777gfhngtn777', 'sourcekey': '77777', 'last_updated': None}, 'verwerking': 'gnyghnj',...

perform_update() просто вызывается update(), который выполняет валидацию через serializer.is_valid(). Во время такой проверки обновленные значения появятся в serializer.validated_data как documented, к которому вы и должны обращаться.

Доступ к serializer.data можно получить только после сохранения/обновления экземпляра через serializer.save(). Только после этого вы сможете просмотреть обновленное значение в serializer.data.

Вернуться на верх