如何在Django Graphene查询中公开Wagtail搜索?

时间:2019-07-13 18:01:43

标签: python django graphql wagtail graphene-django

给出一般结构:

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”来展示the搜索功能,因为我最终希望通过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之外并移至“查询/节点/自定义”连接,如果是这样,我如何在“文章”中添加一个附加字段,以将其视为解决文章的最后一步(即添加到过滤器查询集的末尾)?如果它确实属于一个单独的Connection,是否可以将该连接与django过滤器连接结合在一起?

我认为这种通过石墨烯访问Wagtail搜索的模式已经存在,但是我没有运气在文档中找到它。

0 个答案:

没有答案