From d5f895f6c009ddc36955d0e40a2de6b2dce0bed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Beaul=C3=A9?= Date: Thu, 5 Mar 2020 20:13:15 -0500 Subject: [PATCH] Allow serializer data to include related objects by object When instantiating a serializer from cleaned data, the relational fields have been already converted into objects, which makes the fields invalid. Having a valid object as the value of a field should be considered valid, even if not in the prescribed format. As such, this change adds a check to allow objects of the model type in lieu of the proper representation. --- rest_framework/relations.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 3a2a8fb4b..f615b13e6 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -250,6 +250,10 @@ class PrimaryKeyRelatedField(RelatedField): return True def to_internal_value(self, data): + + if isinstance(data, self.get_queryset().model): + return data + if self.pk_field is not None: data = self.pk_field.to_internal_value(data) try: @@ -331,6 +335,10 @@ class HyperlinkedRelatedField(RelatedField): return self.reverse(view_name, kwargs=kwargs, request=request, format=format) def to_internal_value(self, data): + + if isinstance(data, self.get_queryset().model): + return data + request = self.context.get('request', None) try: http_prefix = data.startswith(('http:', 'https:'))