проблемы при поиске моделей в трясогузке django

У меня небольшой кризис в поиске моделей в трясогузке 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"

Я окаменел. Что я делаю не так?

1 ответ

Когда вы посмотрите документацию для поиска в трясогузке, вы увидите, что есть два способа поиска в трясогузке, которые, я думаю, вы перепутали. Первый из них наиболее очевиден: просто передается поисковый запрос методу поиска в 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)
Другие вопросы по тегам