繁体   English   中英

如何使用GraphQL,Graphene和Relay更改现有数据?

[英]How do I mutate existing data with GraphQL, Graphene and Relay?

我觉得应该将其记录在某处,但找不到。 我可以通过突变将数据添加到数据库中,但无法更改。

Graphene与Django一起使用,我的数据库是SQLite

它很具体,我希望有人知道答案。 我尝试过的其他方法包括:

mutation AppMutation(
  $input: AddSchoolNodeInput!
  ) {
    addSchool(input: $input) {
      school {
        id
        name
        description
     }     
    }
  }

在这里AddSchoolNodeInput! 是( "U2Nob29sTm9kZToxMQ=="是现有ID):

{
  "name": "edit kaas", 
  "description": "edit fails",
  "clientMutationId":"U2Nob29sTm9kZToxMQ=="
 } 

它创建一个新项目并返回此:

{
  "data": {
    "addSchool": {
      "school": {
        "id": "U2Nob29sTm9kZToxNA==",
        "name": "edit kaas",
        "description": "edit fails"
      }
    }
  }
}

通过提供上述突变的ID并在模式中执行此操作,我可以编辑现有学校:

class AddSchool(relay.ClientIDMutation):
    class Input:
        name = String()
        description = String()
        id = String()

    school = Field(SchoolNode)

    @classmethod
    def mutate_and_get_payload(cls, input, context, info):
        name = input.get("name")
        description = input.get("description")
        id = input.get("id")

        if id:
            id = from_global_id(id)[1]
            school = School.objects.get(id=id)
            if name:
                school.name = name
            if description:
                school.description = description

        else:
            school = School(
                name=name,
                description=description
            )

        school.save()

        return AddSchool(school=school)

它获取ID,将其放入if语句中,然后使用from_global_id将其从石墨烯ID传输到Django ID,然后从数据库获取。 如果可以找到它,则会发生错误,因此,仅当没有提供ID时,才会创建新学校。

不知道它是否是最佳实践,但是否可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM