Трясогузка - полное имя владельца страницы поиска

Я создаю сайт документации в стиле блога. Когда была создана дочерняя страница, я использовал поле ввода пользователя для автора. Я узнал, что владелец дома Трясогузки на странице модели. Чтобы не дублировать данные, я удалил поле автора, чтобы использовать поле трясогузки по умолчанию. Однако я настроил модуль LDAP для аутентификации, поэтому владелец размещается как идентификатор сотрудника, а не имя пользователя. Этот идентификатор сотрудника сопоставляется с полным именем, и я могу получить к нему доступ в шаблоне через owner.get_full_name.

Итак, вопрос в том, как мне настроить поиск по умолчанию, чтобы проверять полное имя владельца при выполнении поиска? Как это попасть в поисковый индекс? Я все еще немного новичок в Wagtail, так что это может быть случай создания поля автора с сопоставлением внешнего ключа с таблицей пользователя, или мне следует изменить представление поиска, чтобы включить прогон по таблице пользователей?

def search(request):
search_query = request.GET.get('query', None)
page = request.GET.get('page', 1)

# Search
if search_query:
    search_results = Page.objects.live().search(search_query)
    query = Query.get(search_query)

    # Record hit
    query.add_hit()
else:
    search_results = Page.objects.none()

# Pagination
paginator = Paginator(search_results, 10)
try:
    search_results = paginator.page(page)
except PageNotAnInteger:
    search_results = paginator.page(1)
except EmptyPage:
    search_results = paginator.page(paginator.num_pages)

return TemplateResponse(request, 'search/search.html', {
    'search_query': search_query,
    'search_results': search_results,
})

1 ответ

Решение

Если вы посмотрите документацию по поиску Wagtail, в ней описан процесс индексации вызываемых объектов и дополнительных атрибутов:

https://docs.wagtail.io/en/stable/topics/search/indexing.html#indexing-callables-and-other-attributes

Итак, что бы я сделал:

  1. Создайте метод get_owner_full_name() в своем классе страницы
  2. Добавьте index.SearchField('get_owner_full_name') в search_fields

Одно замечание: это будет работать, только если вы используете серверную часть PostgreSQL или Elasticsearch. Бэкэнд базы данных по умолчанию не поддерживает индексацию дополнительных полей.

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