diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 0492ce2..a986d7a 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -70,7 +70,11 @@ def convert_choices_to_named_enum_with_descriptions(name, choices): def generate_enum_name(django_model_meta, field): - if graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING is True: + if graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME and callable( + graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME + ): + name = graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME(field) + elif graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING is True: name = "DjangoModel{app_label}{object_name}{field_name}Choices".format( app_label=to_camel_case(django_model_meta.app_label.title()), object_name=django_model_meta.object_name, diff --git a/graphene_django/settings.py b/graphene_django/settings.py index 75b5fa3..666ad8a 100644 --- a/graphene_django/settings.py +++ b/graphene_django/settings.py @@ -38,6 +38,7 @@ DEFAULTS = { "CAMELCASE_ERRORS": False, # Set to True to enable v3 naming convention for choice field Enum's "DJANGO_CHOICE_FIELD_ENUM_V3_NAMING": False, + "DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME": None, } if settings.DEBUG: diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 368ae83..a3261df 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -514,14 +514,14 @@ class TestDjangoObjectType: query: Query } - enum DjangoModelTestsPetModelKindChoices { + enum CustomEnumKind { CAT DOG } type PetModelKind { id: ID! - kind: DjangoModelTestsPetModelKindChoices! + kind: CustomEnumKind! } type Query { @@ -531,15 +531,13 @@ class TestDjangoObjectType: ) graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = False - def test_django_objecttype_choices_override_enum(self, PetModel): - def convert_choice(model, field_name, **kwargs): - return convert_choice_field_to_enum( - model._meta.get_field(field_name), **kwargs - ) + def test_django_objecttype_choices_custom_enum_name(self, PetModel): + def custom_name(field): + return f"CustomEnum{field.name.title()}" + + graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME = custom_name class PetModelKind(DjangoObjectType): - kind = Field(convert_choice(PetModel, "kind", name="CustomEnumName")) - class Meta: model = PetModel fields = ["id", "kind"] @@ -570,3 +568,5 @@ class TestDjangoObjectType: } """ ) + + graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME = None