【问题标题】:Filter at multiple levels with GraphQL and Graphene使用 GraphQL 和 Graphene 在多个级别进行过滤
【发布时间】:2017-08-29 00:49:06
【问题描述】:

我正在使用 Django 和 Graphene,并且我想过滤多个级别。但我无法通过“名为 \"undefined\" 的未知操作”。或在层次结构的每个级别获取所有对象(即:为每个作业列出的所有作业的所有作业详细信息)。

我正在尝试执行此查询:

query {
  allPushes(revision: "1ef73669e8fccac35b650ff81df1b575a39a0fd5") {
    edges {
      node {
        revision
        author
        jobs (result: "testfailed") {
          edges {
            node {
              result
              jobDetails (url_Iendswith: "errorsummary.log") {
                edges {
                  node {
                    url
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

在 Django 中,jobDetails 有一个指向 jobs 的外键,而 jobs 有一个指向 pushes 的外键

我的第一次尝试是设置我的节点:

class JobDetailNode(DjangoObjectType):
    class Meta:
        model = JobDetail
        filter_fields = {
            'url': ('exact', 'icontains', 'iendswith')
        }
        interfaces = (relay.Node, )


class JobNode(DjangoObjectType):
    class Meta:
        model = Job
        filter_fields = ('result', 'tier')
        interfaces = (relay.Node, )

    job_details = DjangoFilterConnectionField(JobDetailNode)


class PushNode(DjangoObjectType):
    class Meta:
        model = Push
        filter_fields = ('revision', )
        interfaces = (relay.Node, )

    jobs = DjangoFilterConnectionField(JobNode)

但是,正如我所说,这将返回每个工作的所有 jobDetails,而不仅仅是属于该工作的 jobDetails。

但是如果我删除那些DjangoFilterConnectionField 字段,那么我就无法在每个级别进行过滤;只是第一个。

我的查询如下所示:

class Query(ObjectType):
    all_pushes = DjangoFilterConnectionField(PushNode)
    all_jobs = DjangoFilterConnectionField(JobNode)
    all_job_details = DjangoFilterConnectionField(JobDetailNode)

    def resolve_all_pushes(self, args):
        return Push.objects.filter(**args)

    def resolve_all_jobs(self, args):
        return Job.objects.filter(**args)

    def resolve_all_job_details(self, args):
        return JobDetail.objects.filter(**args)

关于如何在多个级别设置过滤的任何建议?提前致谢!!

【问题讨论】:

    标签: python django graphql


    【解决方案1】:

    这是 graphene-django 中的一个错误。它已在 1.3 版中修复。 Changelog

    问候。

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 2019-02-26
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2020-04-14
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多