Как использовать Django Graphene ModelForm Mutation

Я пытаюсь заставить эту мутацию создать новую запись в базе данных. Он возвращает код 200, но без изменений в базе данных, а также возвращает null. В документации нет ясности по этому вопросу.(ModelForm vs функция mutate)

Ответ Graphql:

{
  "data": {
    "addSubjectMark": {
      "subjectMark": null,
      "errors": []
    }
  }
}

Согласно документации django-graphene, я использую DjangoModelForm для обработки ввода в базу данных.

Мой schema.py:

class SubjectMarkType(DjangoObjectType):
    id = graphene.ID(required=True)
    class Meta:
        model = SubjectMark

class AddSubjectMarkMutation(DjangoModelFormMutation):
    subject_mark = graphene.Field(SubjectMarkType)
    class Meta:
        form_class = ReportForm

class Mutation(graphene.ObjectType):
    add_subject_mark = AddSubjectMarkMutation.Field()
  1. Мне нужно добавить в форму метод сохранения?
  2. Мне нужно использовать функцию изменения?(Документы неясны)

Спасибо!

1 ответ

В ReportFormдолжен работать по умолчанию с Django, никаких изменений не требуется. Недостающая часть решаетsubject_mark атрибут в AddSubjectMarkMutation учебный класс.

class SubjectMarkType(DjangoObjectType):
    id = graphene.ID(required=True)

    class Meta:
        model = SubjectMark


class AddSubjectMarkMutation(DjangoModelFormMutation):
    subject_mark = graphene.Field(SubjectMarkType)

    class Meta:
        form_class = ReportForm  # NB. make sure ReportForm is able to save in Django

    # you need to resolve subject_mark to return the new object
    def resolve_subject_mark(self, info, **kwargs):
        return self.subjectMark


class Mutation(graphene.ObjectType):
    add_subject_mark = AddSubjectMarkMutation.Field()
Другие вопросы по тегам