Django Графеновый фильтр Foreign Model - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно отфильтровать объект моего запроса на серверной базе по разрешениям.

Для следующего запроса:

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

Есть разрешения на foo и bar, и мне нужночтобы вернуть только некоторые foo и несколько баров.

Я знаю, что могу использовать поиск по полю для 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?

1 Ответ

0 голосов
/ 27 ноября 2018

Внутри 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, если оно добавляется автоматически.

...