如何使用 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_nameQuery 得到我 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 时,它起作用了。