проблемы при поиске моделей в трясогузке django - PullRequest
0 голосов
/ 06 августа 2020

У меня небольшой кризис при поиске моделей в трясогузке django

Это мой код для объектов модели

recipes = RecipePage.objects.child_of(self).live().public() \
        .select_related('listing_image')
    extra_url_params = ''
    error_message=False
    filter_categories_raw = request.GET.get('categories')
    filter_categories = False
    filter_name = request.GET.get("name")
    
    if filter_categories_raw:
        filter_categories = []
        filter_categories_raw = filter_categories_raw.split(",")
        for fc in filter_categories_raw:
            try:
                value = int(fc)
                filter_categories.append(value)
            except ValueError:
                filter_categories = False
                error_message = "Invalid category value"

    if filter_categories:
        for filter_category in filter_categories:
            recipes = recipes.filter(categories__category=filter_category)
    
    if filter_name:
        recipes = recipes.search(filter_name, recipes) <---- issue here
        
    if not filter_name:
        filter_name=""

Моя модель RecipePage, которую я добавил

search_fields = BasePage.search_fields + [
    index.SearchField('title'),
]

Теперь, когда я делаю это для поиска,

recipes = recipes.search(filter_name, recipes)

это дает мне ошибку

Невозможно неявно преобразовать объект RecipePage в str

Когда я это делаю

recipes = recipes.search(filter_name, recipes.title) or recipes = recipes.search(filter_name, recipes.objects)

Это дает мне

Объект PageQuerySet не имеет атрибута title

I меня обкурили. Что я делаю не так?

1 Ответ

0 голосов
/ 06 августа 2020

Когда вы посмотрите на документы по поиску в Wagtail , вы увидите, что есть два способа поиска в Wagtail, которые, я думаю, вы перепутали. Первый из них наиболее очевиден: просто передается поисковый запрос методу поиска в QuerySet. Во-вторых, путем передачи условия поиска и QuerySet методу поиска search_backend.

В вашем случае:

Удалите QuerySet из вашего search вызова:

 recipes = recipes.search(filter_name)

или:

Передайте поисковый запрос и QuerySet в search_backend:

из wagtail.search.backends import get_search_backend

s = get_search_backend()
s.search(filter_name, recipes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...