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()