From 23d225b372406bd575b82f7b8bdcfc2b4b8160ea Mon Sep 17 00:00:00 2001 From: Jerin Peter George Date: Wed, 15 Jul 2020 11:05:19 +0530 Subject: [PATCH] 'PrimaryKeySerializerField' introduced --- rest_framework/relations.py | 12 ++++++++++++ rest_framework/serializers.py | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 3a2a8fb4b..d85639d08 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -265,6 +265,18 @@ class PrimaryKeyRelatedField(RelatedField): return value.pk +class PrimaryKeySerializerField(PrimaryKeyRelatedField): + def __init__(self, serializer, **kwargs): + self.serializer = serializer + super().__init__(**kwargs) + + def use_pk_only_optimization(self): + return False + + def to_representation(self, instance): + return self.serializer(instance, context=self.context).data + + class HyperlinkedRelatedField(RelatedField): lookup_field = 'pk' view_name = None diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 916f8bec4..6501c9955 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -57,7 +57,8 @@ from rest_framework.fields import ( # NOQA # isort:skip ) from rest_framework.relations import ( # NOQA # isort:skip HyperlinkedIdentityField, HyperlinkedRelatedField, ManyRelatedField, - PrimaryKeyRelatedField, RelatedField, SlugRelatedField, StringRelatedField, + PrimaryKeyRelatedField, PrimaryKeySerializerField, RelatedField, SlugRelatedField, + StringRelatedField, ) # Non-field imports, but public API