From cd80a8f99d0a049e000d9218cbcac73ad35626f4 Mon Sep 17 00:00:00 2001 From: CBuiVNG Date: Tue, 25 Aug 2020 09:30:10 +0200 Subject: [PATCH] don't filter out lookup_field as input (required for update) --- graphene_django/rest_framework/mutation.py | 6 +++++- graphene_django/rest_framework/tests/test_mutation.py | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/graphene_django/rest_framework/mutation.py b/graphene_django/rest_framework/mutation.py index 592f8b3..0ae2676 100644 --- a/graphene_django/rest_framework/mutation.py +++ b/graphene_django/rest_framework/mutation.py @@ -26,6 +26,7 @@ def fields_for_serializer( exclude_fields, is_input=False, convert_choices_to_enum=True, + lookup_field=None, ): fields = OrderedDict() for name, field in serializer.fields.items(): @@ -35,7 +36,8 @@ def fields_for_serializer( name in exclude_fields, field.write_only and not is_input, # don't show write_only fields in Query - field.read_only and is_input, # don't show read_only fields in Input + field.read_only and is_input + and lookup_field != name, # don't show read_only fields in Input ] ) @@ -90,6 +92,7 @@ class SerializerMutation(ClientIDMutation): exclude_fields, is_input=True, convert_choices_to_enum=convert_choices_to_enum, + lookup_field=lookup_field, ) output_fields = fields_for_serializer( serializer, @@ -97,6 +100,7 @@ class SerializerMutation(ClientIDMutation): exclude_fields, is_input=False, convert_choices_to_enum=convert_choices_to_enum, + lookup_field=lookup_field, ) _meta = SerializerMutationOptions(cls) diff --git a/graphene_django/rest_framework/tests/test_mutation.py b/graphene_django/rest_framework/tests/test_mutation.py index 1599fea..ffbc4b5 100644 --- a/graphene_django/rest_framework/tests/test_mutation.py +++ b/graphene_django/rest_framework/tests/test_mutation.py @@ -143,17 +143,20 @@ def test_write_only_field_using_extra_kwargs(): def test_read_only_fields(): class ReadOnlyFieldModelSerializer(serializers.ModelSerializer): + id = serializers.CharField(read_only=True) cool_name = serializers.CharField(read_only=True) class Meta: model = MyFakeModelWithPassword - fields = ["cool_name", "password"] + lookup_field = "id" + fields = ["id", "cool_name", "password"] class MyMutation(SerializerMutation): class Meta: serializer_class = ReadOnlyFieldModelSerializer assert "password" in MyMutation.Input._meta.fields + assert "id" in MyMutation.Input._meta.fields assert ( "cool_name" not in MyMutation.Input._meta.fields ), "'cool_name' is read_only field and shouldn't be on arguments"