Невозможно вернуть ноль для ошибки, не равной нулю, с мутациями в форме графена - PullRequest
0 голосов
/ 05 июля 2019

Я пробую пример графен-джанго с формами. Но я получаю следующую ошибку:

`graphql.error.base.GraphQLError: Невозможно вернуть ноль для не обнуляемого поля [MyMutationPayload.name].

Я пытался установить значения в выражении возврата внутри функции execute_mutate. Он не работает, если запрос не выполняет все варианты.

class MyForm(forms.Form):
  name = forms.CharField(min_length=10)
  age = forms.IntegerField(min_value=0)
  birth_date = forms.DateField()

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

  @classmethod
  def perform_mutate(cls, form, info):
    print('ok')
    return cls(errors=[], name=form.cleaned_data.get('name'), age=form.cleaned_data.get('age'), birth_date=form.cleaned_data.get('birth_date'))

class Mutations():
  my_mutation = MyMutation.Field()

class Mutation(Mutations, ObjectType):
  pass

ROOT_SCHEMA = Schema(mutation=Mutation)

Запрос

mutation customMutation($data: MyMutationInput!){
  myMutation(input: $data){
    name
    age
    birthDate
    errors{
      field
      messages
    }
    clientMutationId
  }
}

Переменные

{
  "data": {
    "name": "Cristhiam",
    "age": "-29",
    "birthDate": "1990-04-06"
  }
}

Ответ

{
  "errors": [
    {
      "message": "Cannot return null for non-nullable field MyMutationPayload.name.",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "myMutation",
        "name"
      ]
    }
  ],
  "data": {
    "myMutation": null
  }
}

Результат мутации должен показать все ошибки или все значения формы.

1 Ответ

1 голос
/ 07 июля 2019

Измените ваш код следующим образом

class MyForm(forms.Form):
    name = forms.CharField(min_length=10)
    age = forms.IntegerField(min_value=0)
    birth_date = forms.DateField()


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

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        print('ok')
        return cls(errors=[], name=input.get('name'), age=input.get('age'), birth_date=input.get('birth_date'))

class Mutations(ObjectType):
  my_mutation = MyMutation.Field()

class Mutation(Mutations, ObjectType):
  pass

ROOT_SCHEMA = Schema(mutation=Mutation)

input - аргумент, который передается мутации в соответствии с их документацией.

...