Как открыть поиск Wagtail в запросе Django Graphene?

Учитывая общую структуру:

class Article(Page):
  body = RichTextField(...)
  search_fields = Page.search_fields + [index.SearchField('body')]

class ArticleFilter(FilterSet):
  search = SearchFilter()

  class Meta:
    model = Article
    fields = ['slug']

class Query(ObjectType):
  articles = DjangoFilterConnectionField(ArticleNode, filterset_class=ArticleFilter)

Я подумал создать SearchFilter, чтобы раскрыть функциональность поиска трясогузки, так как в конечном итоге я хочу выполнить полнотекстовый поиск через graphql следующим образом:

query {
  articles (search: "some text in a page") {
     edges {
        nodes {
           slug
        }
     }
  }
}

"поиск" не является полем в модели Django, поэтому я создал специальное поле в Django FilterSet. Я думал сделать что-то вроде:

class SearchFilter(CharFilter):
  def filter(self, qs, value):
     search_results = [r.pk for r in qs.search(value)]
     return self.get_method(qs)(pk__in=search_results)

Тем не менее, мне любопытно, есть ли лучший шаблон, который более эффективен. Как минимум, я бы хотел, чтобы SearchFilter добавлялся последним (поэтому поиск сначала фильтруется).

Если "поиск" был перемещен за пределы FilterSet и в соединение Query/Node/custom, и если да, как я могу добавить дополнительное поле в "статьи", чтобы увидеть его как последний шаг в разрешении статей (т.е. до конца фильтра запросов)? Если это относится к отдельному соединению, возможно ли объединить это соединение с соединением фильтра django?

Я думаю, что этот шаблон доступа к поиску Wagtail через графен уже существует, однако мне не повезло найти его в документации.

0 ответов

Другие вопросы по тегам