如何在 Django 中搜索精确值?

0 django django-templates django-models django-forms django-views

我创建了一个搜索功能。但是,它会搜索包含输入值的所有元素。例如,有以下元素:44564、76436、445。当我输入“445”时,它显示“44564”和“445”,但我只需要445。或者如果我输入“64”,那么什么都不应该显示,但显示“44564”和“76436”。如何修复它?

案例列表.html

<div>
    <h3>Search</h3>
    <form method="GET" action="{% url 'case_search' %}">
        <input type="search" type="text" name="q" prequired placeholder="Put value">
        <button type="submit">Find</button>
    </form>
</div>
<div>
  {% for case in object_list %}
        <div>
            <p>{{ case.name }}</p>
        </div>
  {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)

视图.py

class CaseView(ListView):
    model = Case
    template_name = 'case_list.html'

class CaseSearch(ListView):
    template_name = 'case_list.html'
    def get_queryset(self):
        return Case.objects.filter(name__icontains=self.request.GET.get("q"))
    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context["q"] = self.request.GET.get("q")
        return context
Run Code Online (Sandbox Code Playgroud)

网址.py

    path('case_list/', CaseView.as_view(), name='case_list'),
    path('case_list/search/', CaseSearch.as_view(), name="case_search"),
Run Code Online (Sandbox Code Playgroud)

Mar*_*rco 5

使用 iexact 进行精确匹配。查看文档https://docs.djangoproject.com/en/4.1/ref/models/querysets/#iexact

Case.objects.filter(name__iexact=self.request.GET.get("q"))
Run Code Online (Sandbox Code Playgroud)