@@ -29,6 +29,12 @@ class Meta:
2929 model = Pet
3030 fields = "__all__"
3131
32+ def clean_age (self ):
33+ age = self .cleaned_data ["age" ]
34+ if age >= 99 :
35+ raise ValidationError ("Too old" )
36+ return age
37+
3238
3339class PetType (DjangoObjectType ):
3440 class Meta :
@@ -243,6 +249,10 @@ class Mutation(ObjectType):
243249 name
244250 age
245251 }
252+ errors {
253+ field
254+ messages
255+ }
246256 }
247257 }
248258 """
@@ -255,6 +265,42 @@ class Mutation(ObjectType):
255265 self .assertEqual (pet .name , "Mia" )
256266 self .assertEqual (pet .age , 10 )
257267
268+ def test_model_form_mutation_invalid_input (self ):
269+ class PetMutation (DjangoModelFormMutation ):
270+ pet = Field (PetType )
271+
272+ class Meta :
273+ form_class = PetForm
274+
275+ class Mutation (ObjectType ):
276+ pet_mutation = PetMutation .Field ()
277+
278+ schema = Schema (query = MockQuery , mutation = Mutation )
279+
280+ result = schema .execute (
281+ """ mutation PetMutation {
282+ petMutation(input: { name: "Mia", age: 99 }) {
283+ pet {
284+ name
285+ age
286+ }
287+ errors {
288+ field
289+ messages
290+ }
291+ }
292+ }
293+ """
294+ )
295+ self .assertIs (result .errors , None )
296+ self .assertEqual (result .data ["petMutation" ]["pet" ], None )
297+ self .assertEqual (
298+ result .data ["petMutation" ]["errors" ],
299+ [{"field" : "age" , "messages" : ["Too old" ],}],
300+ )
301+
302+ self .assertEqual (Pet .objects .count (), 0 )
303+
258304 def test_model_form_mutation_mutate_invalid_form (self ):
259305 class PetMutation (DjangoModelFormMutation ):
260306 class Meta :
0 commit comments