Django Graphene filter 国外模型

Django Graphene filter Foreign Model

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

对于以下查询:

query {
  foos {
    id
    name
    barSet {
      id
      name
    }
  }
}

有 foo 和 bar 的权限,我只需要 return 一些 foo 和一些 bars。

我知道我可以对 foos 使用字段查找

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 查询请求时对柱状图进行 过滤?

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 中,如果自动添加,您可能需要为 bar_set 字段添加 exclude_fields