Graphene-Django - 如何将参数从 Query 传递到类 DjangoObjectType

Posted

技术标签:

【中文标题】Graphene-Django - 如何将参数从 Query 传递到类 DjangoObjectType【英文标题】:Graphene-Django - how to pass an argument from Query to class DjangoObjectType 【发布时间】:2020-07-28 07:03:18 【问题描述】:

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

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

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

我想做一个由 GraphQL 查询制成的动态页面(由 Django 查询制成的 DjangoObjectType 类中的声明字段),并且我希望能够使用参数 A 动态过滤父级,并且带有参数 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* 中达到了死胡同,理想情况下,它将被传递到 DistributionSetHistoType 类,在那里它将切片 [:2] 替换为 [:限制]在resolve_distribution_slice_set()中

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

感谢您的支持。

【问题讨论】:

【参考方案1】:

这个话题叫pagination

    front end seletion
const  loading, error, data, fetchMore  = useQuery(GET_ITEMS, 
  variables: 
    offset: 0,
    limit: 10
  ,
);
    backend selction
.count(10) 中的数字 10 表示数组中的前 10 个元素
DistributionTuple.objects.filter(**filter_q1).count(10)

【讨论】:

以上是关于Graphene-Django - 如何将参数从 Query 传递到类 DjangoObjectType的主要内容,如果未能解决你的问题,请参考以下文章

在没有中继的情况下使用带有graphene-django的子字段中的参数进行分页

Graphene-Django:在模式中结合查询对象(只接受第一个参数)

如何将 Angular/Apollo 客户端与 graphene-django 集成?

如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?

graphene-django 将 models.BigInteger() 转换为 graphene.Integer()

如何配置 Graphene-Django 以处理持久查询?