You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:57:05