Поисковая часть в навигационной панели работает неправильно (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