diff --git a/graphene_django/rest_framework/mutation.py b/graphene_django/rest_framework/mutation.py index 061c61f..d9ec2c8 100644 --- a/graphene_django/rest_framework/mutation.py +++ b/graphene_django/rest_framework/mutation.py @@ -23,13 +23,13 @@ class SerializerMutationOptions(MutationOptions): def fields_for_serializer( - serializer, - only_fields, - exclude_fields, - is_input=False, - convert_choices_to_enum=True, - lookup_field=None, - optional_fields=(), + serializer, + only_fields, + exclude_fields, + is_input=False, + convert_choices_to_enum=True, + lookup_field=None, + optional_fields=(), ): fields = OrderedDict() for name, field in serializer.fields.items(): @@ -50,11 +50,13 @@ def fields_for_serializer( if is_not_in_only or is_excluded: continue - is_optional = name in optional_fields or '__all__' in optional_fields + is_optional = name in optional_fields or "__all__" in optional_fields fields[name] = convert_serializer_field( - field, is_input=is_input, convert_choices_to_enum=convert_choices_to_enum, - force_optional=is_optional + field, + is_input=is_input, + convert_choices_to_enum=convert_choices_to_enum, + force_optional=is_optional, ) return fields @@ -69,17 +71,16 @@ class SerializerMutation(ClientIDMutation): @classmethod def __init_subclass_with_meta__( - cls, - lookup_field=None, - serializer_class=None, - model_class=None, - model_operations=("create", "update"), - only_fields=(), - exclude_fields=(), - convert_choices_to_enum=True, - _meta=None, - optional_fields=() - **options + cls, + lookup_field=None, + serializer_class=None, + model_class=None, + model_operations=("create", "update"), + only_fields=(), + exclude_fields=(), + convert_choices_to_enum=True, + _meta=None, + optional_fields=() ** options, ): if not serializer_class: raise Exception("serializer_class is required for the SerializerMutation") @@ -103,7 +104,7 @@ class SerializerMutation(ClientIDMutation): is_input=True, convert_choices_to_enum=convert_choices_to_enum, lookup_field=lookup_field, - optional_fields=optional_fields + optional_fields=optional_fields, ) output_fields = fields_for_serializer( serializer, diff --git a/graphene_django/rest_framework/serializer_converter.py b/graphene_django/rest_framework/serializer_converter.py index deab7d2..51695c5 100644 --- a/graphene_django/rest_framework/serializer_converter.py +++ b/graphene_django/rest_framework/serializer_converter.py @@ -18,8 +18,9 @@ def get_graphene_type_from_serializer_field(field): ) -def convert_serializer_field(field, is_input=True, convert_choices_to_enum=True, - force_optional=False): +def convert_serializer_field( + field, is_input=True, convert_choices_to_enum=True, force_optional=False +): """ Converts a django rest frameworks field to a graphql field and marks the field as required if we are creating an input type @@ -32,7 +33,10 @@ def convert_serializer_field(field, is_input=True, convert_choices_to_enum=True, graphql_type = get_graphene_type_from_serializer_field(field) args = [] - kwargs = {"description": field.help_text, "required": is_input and field.required and not force_optional} + kwargs = { + "description": field.help_text, + "required": is_input and field.required and not force_optional, + } # if it is a tuple or a list it means that we are returning # the graphql type and the child type diff --git a/graphene_django/rest_framework/tests/test_mutation.py b/graphene_django/rest_framework/tests/test_mutation.py index 9159d32..bfb2f17 100644 --- a/graphene_django/rest_framework/tests/test_mutation.py +++ b/graphene_django/rest_framework/tests/test_mutation.py @@ -104,6 +104,7 @@ def test_exclude_fields(): assert "cool_name" in MyMutation.Input._meta.fields assert "created" not in MyMutation.Input._meta.fields + def test_model_serializer_optional_fields(): class MyMutation(SerializerMutation): class Meta: