如何 return 自定义没有 SQLAlchemy 类型的子对象
How to return custom child object that does not have a SQLAlchemy type
我有 Foo
和 Bar
类型的对象,每个 Bar
对象都有一个字段类别(由名称字符串指定)和一个将其链接到的对象的父 ID输入 Foo
... 我希望有一个可以按如下方式查询的 GQL 模式:
{
foo {
category {
name
bar {
}
}
}
Foo 和 Bar 都存在于数据库中,可以很容易地生成为 SQLAlchemy 对象。但是我不太确定如何编写一个以这种方式给 Foo 对象 returns 所有类别的解析器,以及如何编写一个给定类别 returns 所有对象的解析器是该类别中 foo 的子代。
所以你在这里需要的是一个自定义的CategoryType
。
class CategoryType(graphene.ObjectType):
name = graphene.String()
bars = graphene.List(BarType)
然后在你的FooType
class FooType(SQLAlchemyObjectType):
class Meta:
model = Foo
categories = graphene.List(CategoryType)
def resolve_categories(self, info):
organized = {}
for bar in self.bars:
if (bar.category in organized):
organized[bar.category].append(bar)
else:
organized[bar.category] = [bar]
return [{ "name": name, "bars": bars } for name, bars in organized.items()]
我有 Foo
和 Bar
类型的对象,每个 Bar
对象都有一个字段类别(由名称字符串指定)和一个将其链接到的对象的父 ID输入 Foo
... 我希望有一个可以按如下方式查询的 GQL 模式:
{
foo {
category {
name
bar {
}
}
}
Foo 和 Bar 都存在于数据库中,可以很容易地生成为 SQLAlchemy 对象。但是我不太确定如何编写一个以这种方式给 Foo 对象 returns 所有类别的解析器,以及如何编写一个给定类别 returns 所有对象的解析器是该类别中 foo 的子代。
所以你在这里需要的是一个自定义的CategoryType
。
class CategoryType(graphene.ObjectType):
name = graphene.String()
bars = graphene.List(BarType)
然后在你的FooType
class FooType(SQLAlchemyObjectType):
class Meta:
model = Foo
categories = graphene.List(CategoryType)
def resolve_categories(self, info):
organized = {}
for bar in self.bars:
if (bar.category in organized):
organized[bar.category].append(bar)
else:
organized[bar.category] = [bar]
return [{ "name": name, "bars": bars } for name, bars in organized.items()]