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
.