Как создать расширенную панель поиска с помощью 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")
Вернуться на верх