我在Django / Graphene后端设置中有一些视频项目 . 每个视频项都链接到一个所有者 . 在React应用程序中,我想通过GraphQL一方面查询当前用户拥有的所有视频,另一方面查询当前用户不拥有的所有视频 .
我可以在客户端运行以下GraphQl查询和过滤器:
query AllScenes {
allScenes {
edges {
node {
id,
name,
owner {
name
}
}
}
}
}
我宁愿使用过滤器参数进行两次查询,直接向我的后端询问相关数据 . 就像是:
query AllScenes($ownerName : String!, $exclude: Boolean!) {
allScenes(owner__name: $ownerName, exclude: $exclude) {
edges {
node {
id,
name,
owner {
name
}
}
}
}
}
我会查询 ownerName = currentUserName
和 exclude = True/False
但我无法在我的后端检索我的 exclude
参数 . 这是我在schema.py文件中尝试过的代码:
from project.scene_manager.models import Scene
from graphene import ObjectType, relay, Int, String, Field, Boolean, Float
from graphene.contrib.django.filter import DjangoFilterConnectionField
from graphene.contrib.django.types import DjangoNode
from django_filters import FilterSet, CharFilter
class SceneNode(DjangoNode):
class Meta:
model = Scene
class SceneFilter(FilterSet):
owner__name = CharFilter(lookup_type='exact', exclude=exclude)
class Meta:
model = Scene
fields = ['owner__name']
class Query(ObjectType):
scene = relay.NodeField(SceneNode)
all_scenes = DjangoFilterConnectionField(SceneNode, filterset_class=SceneFilter, exclude=Boolean())
def resolve_exclude(self, args, info):
exclude = args.get('exclude')
return exclude
class Meta:
abstract = True
我使用了自定义 SceneFilter
,但我不知道如何将 exclude
arg传递给它 . (我不认为我正在正确使用resolver) . 任何有关此事的帮助将不胜感激!
1 回答
切换到graphene-django 1.0,我已经能够通过以下查询定义做我想要的事情:
BossGrand在GitHub上提出了an other solution