如何使用 Django 创建高级搜索栏?

问题描述 投票:0回答:1

美好的一天, 目前我正在做一个项目,这是我第一次这样做。我在后端,在前端做了一些事情以使其更加直观。 我选择 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 相关联,以查看这些单词在文本中的位置并将其显示在搜索结果中。然后可以选择在前端对它们进行排序并使用 trt_keyconcepts 的第 2 列

有人可以帮助我吗? 我应该在 forms.py 上创建 advance_search 吗?

@Pycm 我已经删除了模板来重做。

但我正在尝试使用 trt_keyconcepts 的第一列来过滤 trt_text 上的内容。我可以在 django 上做什么来实现这个视图?

python django django-views frontend django-urls
1个回答
0
投票

您可以使用

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")
© www.soinside.com 2019 - 2024. All rights reserved.