Django Graphene过滤器外部模型

时间:2018-11-26 16:09:58

标签: django graphql graphene-python

我需要根据权限在后端过滤我的请求的对象。

对于以下查询:

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查询请求时对在条形上进行过滤?

1 个答案:

答案 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