[英]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.