Как я могу указать Django Graphene Relay возвращать тип соединения по умолчанию для пользовательского резольвера?

У меня есть модели Django, которые содержат M2M отношения, такие как:

class ColorLibrary(BaseModel):
    {..properties..}

class Account(BaseModel):
    color_libraries = ManyToManyField("ColorLibrary", etc...)

У меня есть узел Relay следующего вида:

class ColorLibraryNode(ObjectType):
    class Meta:
        model = ColorLibrary
        interfaces = (graphene.relay.Node,)

Тогда Relay автоматически разрешит Account.color_libraries типом ColorLibraryNodeConnection, который содержит синтаксис edges/node для запроса библиотек цветов.

Проблема, с которой я сталкиваюсь, заключается в том, что у меня также есть некоторые обстоятельства, когда мне нужен пользовательский резольвер для объектов ColorLibrary, например, я хотел бы получить библиотеку по умолчанию для учетной записи, которую я определяю следующим образом:

default_color_library = graphene.Field(ColorLibraryNode)

def resolve_default_color_library(parent, info):
    {..code..}

Это создает неудобство на стороне клиента, поскольку возвращаемый тип ColorLibraryNode вместо ColorLibraryNodeConnection, поэтому я не могу использовать те же фрагменты (и теряю синтаксис ребер/узлов).

Как я могу создать пользовательский резольвер, но использовать встроенный класс соединения по умолчанию, который создается? Я хочу иметь что-то вроде этого:

default_color_library = graphene.relay.ConnectionField(ColorLibraryNodeConnection)

Но проблема в том, что ColorLibraryNodeConnection нигде не определен. Если я попытаюсь создать пользовательский класс соединения с тем же именем, я получу исключение о конфликте имен при построении схемы. Если я использую здесь пользовательский тип, то мне также придется создать пользовательские резольверы, например, для Accounts.color_libraries, иначе разрешаемые типы не будут одинаковыми.

Вернуться на верх