Как создать расширенную панель поиска с помощью Django?
Добрый день, В настоящее время я работаю над проектом, это мой первый раз, когда я занимаюсь подобным. Я занимаюсь бэкэндом и делаю некоторые вещи на фронтэнде, чтобы сделать его более интуитивным. Я выбрал django, потому что он прост, но у меня возникли трудности с созданием расширенного поиска. Вот в чем проблема:
Сначала я сделал 2 скрипта для импорта полных текстов в таблицу на postgresql. Назовем эту таблицу trt_text (в этой таблице есть 2 текста, каждый из которых имеет заголовок и содержание. Затем я сделал еще один скрипт, чтобы поместить еще один .txt в postgresql. Назовем эту таблицу trt_keyconcepts. В этой таблице есть 3 столбца, первый содержит слово/предложение из trt_text, второй - тип слова/предложения, а третий - целое число, содержащее номер, под которым это слово встречается в тексте.
С помощью ChatGPT были сделаны следующие просмотры:
views.py:
def advanced_search(request):
return render(request, "app/advanced_search.html")
def advanced_search_results(request):
if request.method == "GET":
entity_name = request.GET.get("entity_name", "")
entity_type = request.GET.get("entity_type", "")
frequency = request.GET.get("frequency", "")
search_results = Text.objects.all()
if entity_name:
search_results = search_results.filter(content__icontains=entity_name)
if entity_type:
search_results = search_results.filter(textfile__name=entity_name)
if frequency:
search_results = search_results.filter(textfile__frequency=int(frequency))
return render(
request, "app/advanced_search_results.html", {"search_results": search_results}
)
return redirect("advanced_search")
На этом этапе я не создал связь между таблицей, содержащей ключевые понятия, и таблицей, содержащей полные тексты.
Мне трудно это сделать.
Вот urls.py:
path('advanced_search/', advanced_search, name='advanced_search'),
path('advanced_search/results/', advanced_search_results, name='advanced_search_results'),
]
У меня тоже есть html шаблоны, но у меня ничего не получается, может кто-нибудь мне помочь?
Я рассчитывал создать функциональную логику, но, очевидно, я делаю это неправильно.
Цель - связать первый столбец trt_concepts с trt_text, чтобы увидеть, где эти слова находятся в тексте, и отобразить это в результатах поиска. Затем есть возможность сортировать их на фронт-энде и использовать 2 столбца trt_keyconcepts
Может ли кто-нибудь помочь мне? Нужно ли создавать advanced_search в forms.py?
Вы можете использовать Django Q
from django.db.models import Q
def advanced_search_results(request):
if request.method == "GET":
entity_name = request.GET.get("entity_name", "")
entity_type = request.GET.get("entity_type", "")
frequency = request.GET.get("frequency", "")
search_results = Text.objects.all()
search_results = search_results.filter(Q(content__icontains=entity_name)|Q(textfile__name=entity_name)|Q(textfile__frequency=int(frequency))).distinct()
return render(
request, "app/advanced_search_results.html", {"search_results": search_results}
)
return redirect("advanced_search")