Я новичок в трясогузке / джанго.Начать было довольно легко, и я запустил и запустил приложение.Однако я столкнулся с проблемой, когда искал.Приложение довольно маленькое, и я хотел бы использовать базу данных (или MSSQL).Я искал все вокруг, но на удивление не сумел найти решение.Надеюсь получить ее: -)
У меня есть страница со встроенными элементами.Ниже упрощенно
class BlockPage(Page):
content = RichTextField()
content_panels = Page.content_panels + [
FieldPanel('content'),
InlinePanel('rel_page_blocks', label="Markup blocks"),
]
search_fields = [
index.SearchField('content', partial_match=True),
index.RelatedFields('rel_page_blocks', [
index.SearchField('block_content', partial_match=True),
]),
index.FilterField('live'),
]
Встроенная панель определяется следующим образом:
class Blocks(index.Indexed, Orderable):
page = ParentalKey(BlockPage, related_name='rel_page_blocks')
block_content = RichTextField()
panels = [
FieldPanel('block_content'),
]
Пока все хорошо.Теперь я хотел бы найти страницу с ее встроенными блоками.Я успешно выполнил поиск на странице, но блоки не были найдены.Я знаю, что эта проблема решена с помощью поиска Elastic, но это не вариант для меня.
Ее это views.py
def search(request):
search_query = request.GET.get('query', None)
page = request.GET.get('page', 1)
# Search
if search_query:
blocks_results = BlockPage.objects.live().search(search_query)
blocks_result_ids = [p.page_ptr.id for p in blocks_results]
# I get a result using this but I would like it to be attached to the
# parent so when viewing the result I can refere/show the parent BlockPage
# The question is how to attach "r" to the parent result?
r = get_search_backend().search(search_query, Blocks)
page_ids = blocks_result_ids + **other page ids**
search_results = Page.objects.filter(id__in=page_ids)
query = Query.get(search_query)
# Record hit
query.add_hit()
else:
search_results = Page.objects.none()
return render(request, 'search/search.html', {
'search_query': search_query,
'search_results': search_results,
})
Любая подсказка будетс благодарностьюМне здесь всего пару дней, поэтому, пожалуйста, помните об этом, если у вас есть решение.