我需要根据权限在后端过滤我的请求的对象。
对于以下查询:
query {
foos {
id
name
barSet {
id
name
}
}
}
对foo和bar有权限,我只需要返回一些foo和一些bar。
我知道我可以对foo使用字段查找
class FooType(DjangoObjectType):
class Meta:
model = Foo
class BarType(DjangoObjectType):
class Meta:
model = Bar
class Query(object):
foos = graphene.List(FooType)
def resolve_foos(self, info, **kwargs):
# id_list = some code to create a list of ids of possible foos
return Foo.objects.filter(id__in=id_list)
说我有一个可能的条形列表,我如何在graphql查询请求时对在条形上进行过滤?
答案 0 :(得分:1)
在FooType
内,您需要为条形字段创建一个自定义解析器,您可以在其中应用权限过滤。例如,假设Bar
上的管理器方法称为filter_by_user
:
class FooType(DjangoObjectType):
bars = graphene.List(BarType)
class Meta:
model = Foo
def resolve_bars(self, info):
# do something to filter Bars by permissions
return self.bar_set.filter_by_user(info.context.user)
另外,在Bar Meta中,如果exclude_fields
字段是自动添加的,则可能需要添加bar_set
。