diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index eae6a0b2e..693c7b6ac 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -1296,6 +1296,10 @@ class ModelSerializer(Serializer): field_kwargs['slug_field'] = to_field field_class = self.serializer_related_to_field + # `pk_field` is only valid for PrimaryKeyRelatedField + if not issubclass(field_class, PrimaryKeyRelatedField): + field_kwargs.pop('pk_field', None) + # `view_name` is only valid for hyperlinked relationships. if not issubclass(field_class, HyperlinkedRelatedField): field_kwargs.pop('view_name', None) diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index 7e8e8f046..dd3919915 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -265,6 +265,8 @@ def get_relation_kwargs(field_name, relation_info): kwargs.pop('queryset', None) if model_field.null: kwargs['allow_null'] = True + if isinstance(model_field.target_field, models.UUIDField): + kwargs['pk_field'] = models.UUIDField() if kwargs.get('read_only', False): # If this field is read-only, then return early. # No further keyword arguments are valid.