Add converter to graphene_django

This commit is contained in:
Olivia Rodriguez Valdes 2019-01-07 09:03:37 -05:00
parent f76f38ef30
commit 9e007b962e
2 changed files with 29 additions and 2 deletions

View File

@ -1,8 +1,10 @@
from django import forms from django import forms
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from graphene import ID, Boolean, Float, Int, List, String, UUID, Date, DateTime, Time from graphene import ID, Boolean, Float, Int, List, String, UUID, Date, DateTime, Time, Enum
from graphene.utils.str_converters import to_camel_case
from graphene_django.converter import get_choices
from .forms import GlobalIDFormField, GlobalIDMultipleChoiceField from .forms import GlobalIDFormField, GlobalIDMultipleChoiceField
from ..utils import import_single_dispatch from ..utils import import_single_dispatch
@ -82,3 +84,24 @@ def convert_form_field_to_time(field):
@convert_form_field.register(GlobalIDFormField) @convert_form_field.register(GlobalIDFormField)
def convert_form_field_to_id(field): def convert_form_field_to_id(field):
return ID(required=field.required) return ID(required=field.required)
@convert_form_field.register(forms.TypedChoiceField)
def convert_form_to_enum(field, name):
choices = getattr(field, 'choices', None)
name = to_camel_case(name)
choices = list(get_choices(choices))
named_choices = [(c[0], c[1]) for c in choices]
named_choices_descriptions = {c[0]: c[2] for c in choices}
class EnumWithDescriptionsType(object):
"""Enum type definition"""
@property
def description(self):
"""Return field description"""
return named_choices_descriptions[self.name]
enum = Enum(name, list(named_choices), type=EnumWithDescriptionsType)
return enum(description=field.help_text, required=field.required)

View File

@ -30,6 +30,10 @@ def fields_for_form(form, only_fields, exclude_fields):
if is_not_in_only or is_excluded: if is_not_in_only or is_excluded:
continue continue
choices = getattr(field, 'choices', None)
if choices:
fields[name] = convert_form_field(field, field.label or name)
else:
fields[name] = convert_form_field(field) fields[name] = convert_form_field(field)
return fields return fields