Как открыть поиск 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 через графен уже существует, однако мне не повезло найти его в документации.