Как я могу указать 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
, иначе разрешаемые типы не будут одинаковыми.