我正在GraphQLAPI中使用graphene-python
、django-filters
和relay
。让我们想象一下,我有一个类型FrameType
,它有一个整数字段time_offset
,我希望能够在它上面使用一个范围——只要求在给定范围内有time_offset
的帧。我根据graphene-python docs和一个自定义FilterSet
准备了我的schema.py
:
import django_filters
from graphene import ObjectType, relay
from graphene_django import DjangoObjectType, filter
from my_app.blabla import models
class FrameFilter(django_filters.FilterSet):
time_offset = django_filters.RangeFilter()
class Meta:
model = models.Frame
fields = ("time_offset",)
class FrameType(DjangoObjectType):
class Meta:
model = models.Frame
filterset_class = FrameFilter
interfaces = (relay.Node,)
class Query(ObjectType):
frames = filter.DjangoFilterConnectionField(FrameType)
class Meta:
abstract = True
但是,我现在不知道如何查询timeOffset
字段。我在网上没有找到django_filters.RangeFilter
字段的示例。这是我尝试过的一个查询:
query Frame {
frames(first: 20, timeOffset: "{\"gt\":\"4350\", \"lt\":\"5000\"}") {
edges {
node {
timeOffset
}
}
}
。。。还有这些替代方案:
timeOffset: "{\"gt\":4350, \"lt\":5000}"
timeOffset: "{\"start\":\"4350\", \"end\":\"5000\"}"
timeOffset: "{\"min\":\"4350\", \"max\": \"4500\"}"
timeOffset: "[\"4350\", \"5000\"]"
timeOffset: "[4350, 5000]"
timeOffset: "[4350]"
timeOffset: "4350,5000"
这些查询不会引发任何错误,但也不会过滤(返回所有结果)。我迷路了,我不确定我是否仍然没有找到正确的语法,或者我的后端代码中可能有一些错误。我应该如何使用和查询字段上的django_filters.RangeFilter
您可以在Django的queryset级别处理range选项,而不会干扰现有的中继查询
就你而言
start_time_offset
和end_time_offset
参数传递给DjangoConnectionField
resolve_frames
start_time_offset
或end_time_offset
,则在django查询集上进行筛选返回objects.all()
现在,您可以使用relay提供的常规过滤器进行查询:
它有点旧,但因为它可能会帮助其他人,所以您可以检查这个thread,它使用django filterset作为DateRangeField,并且我认为您可以使用filterset RangeFilter对整数使用类似的方法。还可以查看this了解有关石墨烯中过滤器集的更多信息
遗憾的是,这是不可能的。但是,有一个解决办法
根据需要调整过滤器类
现在使用
参考
相关问题 更多 >
编程相关推荐