我想为查询返回中继连接。使用标准石墨烯 - sqlalchemy,您可以这样做:
class Query(graphene.ObjectType):
node = relay.Node.Field()
all_users = SQLAlchemyConnectionField(User)
对于需要更多自定义搜索的各种地方,最简单的方法是自定义解析器:
class Query(graphene.ObjectType):
node = relay.Node.Field()
all_users = graphene.List(User)
def resolve_all_users(self, info, **args):
# Grab the root SQLAlchemy query
query = User.get_query(info)
return query.filter(
User.active,
# and possibly a whole bunch of other filters)
).options(joinedload(User.emails).all()
这样可行,但它返回一个普通的用户列表,不支持SQLAlchemyConnectionField处理的分页或其他中继连接技巧。我正在寻找的是一种返回查询的方法,并以与SQLAlchemyConnectionField类似的方式自动处理它。
答案 0 :(得分:0)
我有个主意。
def search_users(cls, info, **kwargs):
user_query = UserQLSchema.get_query(info)
target = kwargs.get('target')
if target:
target_like = "%{}%".format(target)
user_query = orga_query.filter(UserModel.name.like(target_like))
return user_query.all()
class RootQuery(graphene.ObjectType):
find_users = graphene.relay.ConnectionField(OrganizationFullConnection, target=graphene.String(), resolver=search_users)
同时,还会出现另一个问题,导致每个网络请求两次查询数据库。
答案 1 :(得分:0)
我得出了另一个解决方案。
def search_users(cls, info, **kwargs):
user_query = UserQLSchema.get_query(info)
target = kwargs.get('target')
if target:
target_like = "%{}%".format(target)
user_query = orga_query.filter(UserModel.name.like(target_like))
return user_query
class RootQuery(graphene.ObjectType):
find_users = SQLAlchemyConnectionField(UserQLSchema, target=graphene.String())
def resolve_find_users(self, info, **kwargs):
return search_users(self, info, **kwargs)
可以帮助您。
答案 2 :(得分:0)
这是一个示例代码,其中添加了一个带有参数search_users
的{{1}}查询,以通过电子邮件过滤用户。结果是具有所有连接功能(排序,分页等)的UserConnection
q