Django Проверка формы графена с целочисленным полем - PullRequest
1 голос
/ 13 апреля 2020

Вот мой простой сценарий. У меня есть модель, в которой есть два обязательных поля: имя и возраст:

class Person(models.Model):
    name = models.CharField(max_length=256)
    age = models.PositiveIntegerField()

Я использую Django формуляр с графеном

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ('name', 'age')

class PersonType(DjangoObjectType):
    class Meta:
        model = Person

class PersonMutation(DjangoModelFormMutation):
    class Meta:
        form_class = PersonForm

class Mutation(graphene.ObjectType):
    person_mutation = PersonMutation.Field()

Допустим, человек заполняет поле возраста, но не имя поля. Затем я могу отправить запрос мутации

mutation {
  personMutation(input: {age: 25, name: ""}) {
    errors {
      field
      messages
    }
  }
}

Я получаю следующий ответ, который именно то, что я хочу. Этот ответ прост для go, и я получаю сообщение проверки поля имени.

{
  "data": {
    "personMutation": {
      "errors": [
        {
          "field": "name",
          "messages": [
            "This field is required."
          ]
        }
      ]
    }
  }
}

Но что, если пользователь заполняет имя, а не возраст? Какой запрос на мутацию я должен сделать?

Если я сделаю

mutation {
  personMutation(input: {name: "my name"}) {
    errors {
      field
      messages
    }
  }
}

, я получу ответ ниже. Это ужасное сообщение, я не могу показать это пользователю. Кроме того, формат ответа json отличается от прежнего.

{
  "errors": [
    {
      "message": "Argument \"input\" has invalid value {name: \"my name\"}.\nIn field \"age\": Expected \"Int!\", found null.",
      "locations": [
        {
          "line": 2,
          "column": 25
        }
      ]
    }
  ]
}

Если я попытаюсь ввести age: null или age: "" в качестве входного параметра, это не лучше. Итак, как я могу получить сообщение о проверке Django «Это поле обязательно для заполнения», если возраст не установлен?

1 Ответ

0 голосов
/ 14 апреля 2020

Графен выдает мгновенное сообщение об ошибке, поскольку в модели оба поля имеют значение blank=False (по умолчанию), что делает поле в форме required=True ( см. Do c). Я полагаю, что если вы сделаете запрос, указав только возраст и имя, а не пустую строку, вы получите похожее сообщение об ошибке.

Некоторые идеи о том, как избежать этой проблемы:

  1. Сделайте поля blank=True в вашей модели. Затем вам нужно проверить в своем бэкэнде, установлены ли значения, и сгенерировать пользовательское сообщение об ошибке, если нет.

  2. Создайте поля blank=False (по умолчанию) в вашей модели и оставьте его для интерфейс для проверки, если поля установлены. Например, отключите кнопку «Отправить», если установлены не все необходимые значения. Как мне кажется, это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...