graphene-django非relay模式下如何为嵌套子字段添加分页参数实现分页
解决方案
你只需在TrainingType中显式定义sessions字段并指定分页参数,再绑定自定义resolver即可覆盖graphene-django的默认自动解析逻辑,具体修改如下:
import graphene from graphene_django import DjangoListField class TrainingType(gql_optimizer.OptimizedDjangoObjectType): # 显式声明sessions字段,添加分页参数 sessions = DjangoListField( SessionType, first=graphene.Int(required=False), skip=graphene.Int(required=False) ) class Meta: model = Training fields = "__all__" convert_choices_to_enum = False # 自定义sessions的resolver def resolve_sessions(root, info, first=None, skip=None): # root为当前Training实例,获取关联的session查询集 sessions_qs = root.sessions.all().order_by('-id') if skip: sessions_qs = sessions_qs[skip:] if first: sessions_qs = sessions_qs[:first] return gql_optimizer.query(sessions_qs, info)
注意事项
- 不要直接查询
Session.objects.all(),否则会返回全量session数据,没有和当前父级Training关联,使用root.sessions.all()才能拿到当前训练对应的关联session集合 - 你之前在
SessionType中定义的get_queryset用户过滤逻辑依然会生效,不需要重复编写过滤条件
修改完成后你需要的分页查询即可正常使用。
内容的提问来源于stack exchange,提问作者Rafael Santos
相关产品推荐
相关产品推荐

