繁体   English   中英

Graphene-Django - 如何将参数从查询传递到 class DjangoObjectType

[英]Graphene-Django - how to pass an argument from Query to class DjangoObjectType

首先,谢谢。 已经有 1 年没有提问了,因为我总能找到答案。 你是一个巨大的帮助。

今天,我确实有一个我自己无法解决的问题。 拜托,我希望你能在这件事上帮助我。

背景:我在一个使用 Django 框架的项目上工作,我有一些用 react.js 制作的动态页面。 我在两者之间使用的 API 是基于 graphQL 的。 Apollo 用于客户端,graphene-django 用于后端。

我想做一个由 GraphQL 查询制成的动态页面,该查询具有一组(class DjangoObjectType 中的声明字段,由 Django 制成),并且我希望能够使用父查询动态设置过滤器参数 B。我的问题是如何找到一种方法将参数 B 传递给集合以对其进行过滤。

我将根据 graphQL 文档实现的 graphQL

query DistributionHisto
(
  $id:ID,
  $limit:Int
)
{
  distributionHisto(id:$id)
  {
    id,
    historical(limit:$limit)
    {
       id,
       date,
       histo
    }
  }
}

但我不明白如何在后端将 (limit:$limit) 传递给我的集合。

这是我的 schema.py

import graphene
from graphene_django.types import DjangoObjectType

class DistributionType(DjangoObjectType):
    class Meta:
        model = DistributionTuple

    historical = graphene.List(HistoricalTimeSeriesType)

    def resolve_historical(self, info):
        return HistoricalTimeSeries.objects.filter(
            distribution_tuple_id=self.id
            ).order_by('date')[:2]

class Query(object):
    distribution_histo = graphene.List(
        graphene.NonNull(DistributionType),
        id=graphene.ID(),
        limit=graphene.Int()
        )

    def resolve_distribution_histo(
            self, info, id=None, limit=None):
        filter_q1 = {'id': id} if id else {}
        return DistributionTuple.objects.filter(**filter_q1)

我尝试了几件事,但到目前为止我还没有找到让它工作的方法。

目前,如您所见,arg“limit”在 def resolve* 中达到了死胡同,理想情况下,它将被传递到 class DistributionSetHistoType 在那里它将切片 [:2] 替换为 [:limit] resolve_distribution_slice_set()

我希望我已经清楚了,如果不是这样,请告诉我。

谢谢你的支持。

这个话题叫做pagination

  1. 前端选择
const { loading, error, data, fetchMore } = useQuery(GET_ITEMS, {
  variables: {
    offset: 0,
    limit: 10
  },
});
  1. 后端选择
  • .count(10)中的数字10表示数组中的前 10 个元素
DistributionTuple.objects.filter(**filter_q1).count(10)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM