Как получить доступ к Meta на CustomNode, используя Graphene и Relay - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу создать общий get_node_from_global_id, поэтому мне нужно получить корневую модель, запрашиваемую запросом, а затем вернуть строку из этой таблицы.Для этого я хочу использовать model = getattr(Query,info.field_name).field_type.Meta.model.

Первая часть, getattr(Query,info.field_name).field_type возвращает меня TableNameNode из Query с использованием info.field_name.Но когда я пытаюсь получить доступ к ...Meta.model, я получаю сообщение об ошибке, говорящее об отсутствии атрибута Meta на TableNameNode.Я вижу, что есть вложенный класс 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,)

1 Ответ

0 голосов
/ 30 ноября 2018

После копания здесь у меня появилась идея, что мне следует попробовать ._meta для доступа к вложенному классу Meta.Я не знаю обоснования этого, но когда я изменил свой код на model = getattr(Query,info.field_name).field_type._meta.model, это сработало.

...