Fix return type

This commit is contained in:
Patrick Arminio 2018-10-28 21:55:28 +00:00
parent 9aeee283fa
commit fd516a3f6f
2 changed files with 33 additions and 8 deletions

View File

@ -125,8 +125,7 @@ class DjangoFormMutation(BaseDjangoFormMutation):
input_fields
)
# TODO: output
output_fields = OrderedDict()
if hasattr(form, '_meta') and hasattr(form._meta, 'model'):
model = form._meta.model
@ -141,15 +140,31 @@ class DjangoFormMutation(BaseDjangoFormMutation):
if not return_field_name:
model_name = model.__name__
return_field_name = model_name[:1].lower() + model_name[1:]
output_fields = OrderedDict()
# TODO: model_type might be none
output_fields[return_field_name] = graphene.Field(model_type)
else:
# TODO: return field name support
output_fields = fields_for_form(form, only_fields, exclude_fields)
form_name = form.__class__.__name__
return_field_name = 'TODOFROMForm' if not return_field_name else return_field_name
if not return_field_name:
return_field_name = form_name[:1].lower() + form_name[1:]
# TODO: registry
form_fields = fields_for_form(
form, only_fields, exclude_fields
)
form_type = type(
form_name,
(graphene.ObjectType, ),
yank_fields_from_attrs(form_fields, _as=graphene.Field),
)
output_fields[return_field_name] = graphene.Field(form_type)
output_fields['errors'] = graphene.Field(cls.Errors, required=True)

View File

@ -38,8 +38,8 @@ def test_has_output_fields():
class Meta:
form_class = MyForm
assert "text" in MyMutation._meta.fields
assert "myForm" in MyMutation._meta.fields
assert 'text' in MyMutation._meta.fields['myForm'].type._meta.fields
def test_has_input_fields():
class MyMutation(DjangoFormMutation):
@ -96,6 +96,16 @@ def test_return_field_name_is_camelcased():
assert FilmDetailsMutation._meta.return_field_name == "filmDetails"
def test_custom_return_field_name():
class MyFormMutation(DjangoFormMutation):
class Meta:
form_class = MyForm
return_field_name = "cat"
assert MyFormMutation._meta.return_field_name == "cat"
assert "cat" in MyFormMutation._meta.fields
def test_custom_return_field_name_model_form():
class FilmDetailsMutation(DjangoFormMutation):
class Meta: