diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 706d968..addaec3 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -27,12 +27,16 @@ def convert_choice_name(name): def get_choices(choices): + converted_names = [] for value, help_text in choices: if isinstance(help_text, (tuple, list)): for choice in get_choices(help_text): yield choice else: name = convert_choice_name(value) + if name in converted_names: + name += '_' + str(len(converted_names)) + converted_names.append(name) description = help_text yield name, value, description diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index 69be406..b3ddf40 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -176,6 +176,21 @@ def test_field_with_choices_gettext(): convert_django_field_with_choices(field) +def test_field_with_choices_collision(): + field = models.CharField(help_text='Timezone', choices=( + ('Etc/GMT+1', 'Greenwich Mean Time +1'), + ('Etc/GMT-1', 'Greenwich Mean Time -1'), + )) + + class CollisionChoicesModel(models.Model): + timezone = field + + class Meta: + app_label = 'test' + + convert_django_field_with_choices(field) + + def test_should_float_convert_float(): assert_conversion(models.FloatField, graphene.Float)