From 98de5923030b766a7c9f9c8ae64cebd4e095f6d4 Mon Sep 17 00:00:00 2001 From: "melvanlonden@canvasmedical.com" Date: Wed, 20 Mar 2019 21:20:10 -0600 Subject: [PATCH] support blank fields with choices --- .gitignore | 4 ++++ graphene_django/converter.py | 2 ++ graphene_django/tests/test_converter.py | 18 +++++++++++++++++- graphene_django/tests/test_types.py | 2 ++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0b25625..714cf40 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 c40313d..8d04739 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -62,6 +62,8 @@ 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)) + if field.blank: + choices.append(('EMPTY', '', '')) 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 5dc0184..e44ecb9 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -196,6 +196,22 @@ def test_field_with_choices_collision(): convert_django_field_with_choices(field) +def test_field_with_blank(): + field = models.CharField( + help_text="Language", choices=(("es", "Spanish"), ("en", "English")), blank=True + ) + + 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__["EMPTY"].value == "" + assert graphene_type._meta.enum.__members__["EMPTY"].description == "" + + def test_should_float_convert_float(): assert_conversion(models.FloatField, graphene.Float) @@ -241,7 +257,7 @@ def test_should_manytoone_convert_connectionorlist(): 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() diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 8a8643b..0f18123 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -138,6 +138,7 @@ type ArticleEdge { enum ArticleImportance { A_1 A_2 + EMPTY } enum ArticleLang { @@ -179,6 +180,7 @@ enum ReporterAChoice { enum ReporterReporterType { A_1 A_2 + EMPTY } type RootQuery {