如何使Django Graphene ModelForm Mutation生效

3

我试图使这个mutation在数据库中创建一个新记录。它返回代码200,但对数据库没有任何更改,同时返回null。关于这个问题文档不是很清楚。(ModelForm vs mutate function)

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. 我需要使用mutate函数吗?(文档不清楚)

谢谢!

1个回答

1

ReportForm 应该默认与 Django 一起工作,无需进行修改。 缺失的部分是解决 AddSubjectMarkMutation 类中的 subject_mark 属性。

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接