到目前为止,我能够在不需要DjangoObjectType
. 我尽量避免它,因为我不打算离我的 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实际上是“测试”。
有效的解决方案:
@classmethod
def get_node(cls, info, id):
household = Household.objects.get(pk=id)
return cls(name=household.name)
然而,我非常怀疑这就是 Graphene 能为我做的所有事情。我真的必须将真实的数据对象包装到 中HouseholdNode
吗?我已经有解决功能,不能简单地使用它们吗?
这些边缘上的文档非常缺乏,请赐教。