Integration with Django forms

Graphene-Django comes with mutation classes that will convert the fields on Django forms into inputs on a mutation. Note: the API is experimental and will likely change in the future.

FormMutation

class MyForm(forms.Form):
    name = forms.CharField()

class MyMutation(FormMutation):
    class Meta:
        form_class = MyForm

MyMutation will automatically receive an input argument. This argument should be a dict where the key is name and the value is a string.

ModelFormMutation

ModelFormMutation will pull the fields from a ModelForm.

class Pet(models.Model):
    name = models.CharField()

class PetForm(forms.ModelForm):
    class Meta:
        model = Pet
        fields = ('name',)

# This will get returned when the mutation completes successfully
class PetType(DjangoObjectType):
    class Meta:
        model = Pet

class PetMutation(DjangoModelFormMutation):
    class Meta:
        form_class = PetForm

PetMutation will grab the fields from PetForm and turn them into inputs. If the form is valid then the mutation will lookup the DjangoObjectType for the Pet model and return that under the key pet. Otherwise it will return a list of errors.

You can change the input name (default is input) and the return field name (default is the model name lowercase).

class PetMutation(DjangoModelFormMutation):
    class Meta:
        form_class = PetForm
        input_field_name = 'data'
        return_field_name = 'my_pet'

Form validation

Form mutations will call is_valid() on your forms.

If the form is valid then form_valid(form, info) is called on the mutation. Override this method to change how the form is saved or to return a different Graphene object type.

If the form is not valid then a list of errors will be returned. These errors have two fields: field, a string containing the name of the invalid form field, and messages, a list of strings with the validation messages.