Merge pull request #191 from graphql-python/django-choices-grouping

Django choices grouping
This commit is contained in:
Syrus Akbary 2016-05-31 20:39:25 -07:00
commit de424f7d21
2 changed files with 26 additions and 5 deletions

View File

@ -15,16 +15,20 @@ singledispatch = import_single_dispatch()
def convert_choices(choices): def convert_choices(choices):
for value, name in choices: for value, name in choices:
if isinstance(name, (tuple, list)):
for choice in convert_choices(name):
yield choice
else:
yield to_const(force_text(name)), value yield to_const(force_text(name)), value
def convert_django_field_with_choices(field): def convert_django_field_with_choices(field):
choices = getattr(field, 'choices', None) choices = getattr(field, 'choices', None)
model = getattr(field, 'model', None) if choices:
if choices and model: meta = field.model._meta
meta = model._meta
name = '{}_{}_{}'.format(meta.app_label, meta.object_name, field.name) name = '{}_{}_{}'.format(meta.app_label, meta.object_name, field.name)
return Enum(name.upper(), list(convert_choices(choices)), description=field.help_text) graphql_choices = list(convert_choices(choices))
return Enum(name.upper(), graphql_choices, description=field.help_text)
return convert_django_field(field) return convert_django_field(field)

View File

@ -118,6 +118,23 @@ def test_field_with_choices_convert_enum():
assert graphene_type.__enum__.__members__['ENGLISH'].value == 'en' assert graphene_type.__enum__.__members__['ENGLISH'].value == 'en'
def test_field_with_grouped_choices():
field = models.CharField(help_text='Language', choices=(
('Europe', (
('es', 'Spanish'),
('en', 'English'),
)),
))
class GroupedChoicesModel(models.Model):
language = field
class Meta:
app_label = 'test'
convert_django_field_with_choices(field)
def test_field_with_choices_gettext(): def test_field_with_choices_gettext():
field = models.CharField(help_text='Language', choices=( field = models.CharField(help_text='Language', choices=(
('es', _('Spanish')), ('es', _('Spanish')),