美好的一天, 目前我正在做一个项目,这是我第一次这样做。我在后端,在前端做了一些事情以使其更加直观。 我选择 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 上做什么来实现这个视图?
您可以使用
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")