diff --git a/graphene_django/forms/mutation.py b/graphene_django/forms/mutation.py index a2ac9e0..194b2f6 100644 --- a/graphene_django/forms/mutation.py +++ b/graphene_django/forms/mutation.py @@ -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) diff --git a/graphene_django/forms/tests/test_mutation.py b/graphene_django/forms/tests/test_mutation.py index 2595cf0..4181d4c 100644 --- a/graphene_django/forms/tests/test_mutation.py +++ b/graphene_django/forms/tests/test_mutation.py @@ -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: