Поисковая часть в навигационной панели работает неправильно (django)

Я хотел создать окно поиска в моей панели навигации и показывать продукты, которые я ищу, но, похоже, это не работает должным образом. Я не могу понять, в чем проблема; то есть, если я ищу еду, которая существует, она ничего не показывает.

мой файл views.py:

class SearchResultsView(ListView):
    model = Food
    template_name = "restaurant/food_search_results.html"
    context_object_name = "data"

    def get_queryset(self):
        query = self.request.POST.get("search")
        if query is not None:
            return Food.objects.filter(name__icontains=query)
        else:
            return

мой файл urls.py:

path("search", SearchResultsView.as_view(), name='search_results'),

мой файл base.html:

<form class="form-inline my-2 my-lg-0" action="/search" method="get">
          {% csrf_token %}
          <div class="input-group">
              <label>
                  <input name="search" type="text" class="form-control" placeholder="Search Foods ...">
              </label>
              <div class="input-group-append">
                <a class="btn btn-outline-warning" href="{% url 'search_results' %}" type="submit" >Search</a>
              </div>
          </div>
        </form>

Причина, по которой поиск не возвращает никакого набора запросов, заключается в том, что вы публикуете запрос, а не получаете набор запросов. Именно здесь вы пропустили query = self.request.POST.get("search"), Instend of query = self.request.GET.get("search")


class SearchResultsView(ListView):
    model = Food
    template_name = "restaurant/food_search_results.html"
    context_object_name = "data"

    def get_queryset(self):
        query = self.request.GET.get("search")
        if query is not None:
            return Food.objects.filter(name__icontains=query)
        else:
            return Food.objects.none()

Вы отправляете форму с <button type="submit"></button>, поэтому вам следует изменить форму на:

<form class="form-inline my-2 my-lg-0" action="{% url 'search_results' %}" method="get">
  {% csrf_token %}
  <div class="input-group">
      <label>
          <input name="search" type="text" class="form-control" placeholder="Search Foods ...">
      </label>
      <div class="input-group-append">
        <button type="submit" class="btn btn-outline-warning">Search</button>
      </div>
  </div>
</form>

В представлении мы затем выполняем поиск с помощью:

class SearchResultsView(ListView):
    model = Food
    template_name = 'restaurant/food_search_results.html'
    context_object_name = 'data'

    def get_queryset(self):
        query = self.request.GET.get('search')  # 🖘 use GET
        if query is not None:
            return Food.objects.filter(name__icontains=query)
        else:
            return Food.objects.none()  # 🖘 otherwise still return a queryset
Вернуться на верх