Вот мой простой сценарий. У меня есть модель, в которой есть два обязательных поля: имя и возраст:
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 «Это поле обязательно для заполнения», если возраст не установлен?