如何使用 Graphene 和 Relay 访问 CustomNode 上的 Meta
How to access Meta on CustomNode using Graphene and Relay
我想创建一个通用的 get_node_from_global_id,因此我需要获取查询请求的根模型,然后 return 从该 table 中获取一行。为此,我想使用 model = getattr(Query,info.field_name).field_type.Meta.model
。
第一部分,getattr(Query,info.field_name).field_type
使用 info.field_name
从 Query
得到我 TableNameNode
。但是当我尝试访问 ...Meta.model
时,我收到一条错误消息,指出 TableNameNode
上没有属性 Meta
。我可以看到有一个嵌套的 class Meta
那么我该如何访问它呢?
from graphene_django import DjangoObjectType
from graphene import relay
class CustomNode(relay.Node):
class Meta:
name = 'Node'
@staticmethod
def to_global_id(type, id):
#returns a non-encoded ID
return id
@staticmethod
def get_node_from_global_id(info, global_id, only_type=None):
user = info.context.user
model = getattr(Query,info.field_name).field_type.Meta.model
#return row here...
pass
class Query(object):
tablename = CustomNode.Field(TableNameNode)
class TableNameNode(DjangoObjectType):
class Meta:
model = TableName
interfaces = (CustomNode,)
在深入研究 here 之后,我想到我应该尝试 ._meta
访问 Meta
嵌套的 class。我不知道这背后的基本原理,但是当我将代码更改为 model = getattr(Query,info.field_name).field_type._meta.model
时,它起作用了。
我想创建一个通用的 get_node_from_global_id,因此我需要获取查询请求的根模型,然后 return 从该 table 中获取一行。为此,我想使用 model = getattr(Query,info.field_name).field_type.Meta.model
。
第一部分,getattr(Query,info.field_name).field_type
使用 info.field_name
从 Query
得到我 TableNameNode
。但是当我尝试访问 ...Meta.model
时,我收到一条错误消息,指出 TableNameNode
上没有属性 Meta
。我可以看到有一个嵌套的 class Meta
那么我该如何访问它呢?
from graphene_django import DjangoObjectType
from graphene import relay
class CustomNode(relay.Node):
class Meta:
name = 'Node'
@staticmethod
def to_global_id(type, id):
#returns a non-encoded ID
return id
@staticmethod
def get_node_from_global_id(info, global_id, only_type=None):
user = info.context.user
model = getattr(Query,info.field_name).field_type.Meta.model
#return row here...
pass
class Query(object):
tablename = CustomNode.Field(TableNameNode)
class TableNameNode(DjangoObjectType):
class Meta:
model = TableName
interfaces = (CustomNode,)
在深入研究 here 之后,我想到我应该尝试 ._meta
访问 Meta
嵌套的 class。我不知道这背后的基本原理,但是当我将代码更改为 model = getattr(Query,info.field_name).field_type._meta.model
时,它起作用了。