diff --git a/.gitignore b/.gitignore index 0b256254b..714cf409d 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,7 @@ Session.vim *~ # auto-generated tag files tags + +# Pipenv +Pipfile +Pipfile.lock diff --git a/graphene_django/converter.py b/graphene_django/converter.py index c40313df0..435d9b6ee 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -62,6 +62,11 @@ def convert_django_field_with_choices(field, registry=None): meta = field.model._meta name = to_camel_case("{}_{}".format(meta.object_name, field.name)) choices = list(get_choices(choices)) + default = field.get_default() + if default: + choices_include_default = bool([choice for choice in field.choices if choice[0] == default]) + if not choices_include_default: + choices.append(('DEFAULT', default, 'default value')) named_choices = [(c[0], c[1]) for c in choices] named_choices_descriptions = {c[0]: c[2] for c in choices} diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index 5dc0184c1..3577092b7 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -196,6 +196,38 @@ class Meta: convert_django_field_with_choices(field) +def test_field_with_choices_and_default(): + field = models.CharField( + help_text="Language", choices=(("es", "Spanish"), ("en", "English")), default="nl" + ) + + class TranslatedModel(models.Model): + language = field + + class Meta: + app_label = "test" + + graphene_type = convert_django_field_with_choices(field) + assert graphene_type._meta.enum.__members__["DEFAULT"].value == "nl" + assert graphene_type._meta.enum.__members__["DEFAULT"].description == "default value" + + +def test_field_with_default_in_choices(): + field = models.CharField( + help_text="Language", choices=(("es", "Spanish"), ("en", "English")), default="es" + ) + + class TranslatedModel(models.Model): + language = field + + class Meta: + app_label = "test" + + graphene_type = convert_django_field_with_choices(field) + + assert "DEFAULT" not in graphene_type._meta.enum.__members__ + + def test_should_float_convert_float(): assert_conversion(models.FloatField, graphene.Float) @@ -241,7 +273,7 @@ class A(DjangoObjectType): class Meta: model = Article - graphene_field = convert_django_field(Reporter.articles.rel, + graphene_field = convert_django_field(Reporter.articles.rel, A._meta.registry) assert isinstance(graphene_field, graphene.Dynamic) dynamic_field = graphene_field.get_type()