【发布时间】:2018-06-28 22:27:52
【问题描述】:
到目前为止,我可以在不需要DjangoObjectType 的情况下使用 Graphene。我尽量避免它,因为我不打算离我的 Django 模型类太近。但是我在使用 Graphene 实现 Relay 时遇到了问题:
class HouseholdNode(graphene.ObjectType):
class Meta:
interfaces = (graphene.relay.Node,)
name = graphene.String()
@classmethod
def get_node(cls, info, id):
return Household.objects.get(pk=id)
这会失败并出现以下错误:
抽象类型节点必须在运行时为字段 Query.node 解析为对象类型,值为“Test”,收到“None”。
“测试”直接来自Household 的__str__ 函数。
下一次尝试:
@classmethod
def get_node(cls, info, id):
return cls(Household.objects.get(pk=id))
cls 是 HouseholdNode。然而,这会产生错误的结果:
"node": {
"id": "SG91c2Vob2xkOlRlc3Q=",
"name": null
}
ID 实际上是“Test”。
有效的解决方案:
@classmethod
def get_node(cls, info, id):
household = Household.objects.get(pk=id)
return cls(name=household.name)
但是,我非常怀疑 Graphene 能为我做的只是这些。我真的必须将真实数据对象包装到HouseholdNode 中吗?我已经有了resolve函数,不能直接用吗?
这些方面的文档非常缺乏,请赐教。
【问题讨论】:
-
This issue 在 Github 上是相关的。
标签: python django graphql graphene-python