@robocop45

Почему search field не возвращает результат поиска?

views.py
class MainListVIew(DataMixin,ListView):
    paginate_by = 7
    model = Questions # выбирает все записи из таблицы и отображает их в виде списка
    template_name = 'blog/all_questions.html'
    context_object_name = 'posts'

    def get_context_data(self, *, object_list=None, **kwargs): # формирует динамический и статический контекст, который передается в шаблон
        context = super().get_context_data(**kwargs) # получаем уже сформированый контекст ListView
        c_def = self.get_user_context(title='Главная страница') # через self обращаемся ко всем методам базового класса DataMixin
        q = self.request.GET.get("search")
        try:
            object_list = Questions.objects.filter(Q(q_name__icontains=q))
        except Exception:
            print('Ошибочка')
        print(q)
        return {**context, **c_def, 'object_list':object_list} # объядиняем словарь

    def get_queryset(self):
        return Questions.objects.filter(is_published = True) # возвращвем только опубликованные записи


шаблон(вернее форма)
<div class="topnav">
		<form class="form-inline" method="GET" action="{% url 'home' %}">
			<input class="srch" type="text" name="search" placeholder="Найдите интересуюший вас вопрос... ">
			{% if search %}
              <h1>Search Results</h1>
           <br/>
              {% for s in object_list %}
                <li>
                  {{ s.q_name }}<br/>
               </li>
             {% endfor %}
			 {% else %}
				 <h1>Nothing to search</h1>
			 {% endif %}
		</form>
			<div class="btn-search">
			<button type="button"><i>Поиск</i></button>
			</div>
    </div>

Начал осваивать CBV, и впервые реализовываю такой функционал.

Проблема:
Я ввожу запрос, а ничего не возвращает.
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Начать нужно с того. что никогда не стрелять себе в ногу вот таким вот способом:
try:
    object_list = Questions.objects.filter(Q(q_name__icontains=q))
except Exception:
    print('Ошибочка')

Это хороший способ замести поблему под коврик, а потом искать её спрашивая всех вокруг.
Это равносильно тому, чтобы закрыть глаза и бежать. а потом удивляться и спрашивать откуда шишка на лбу.

Подключите логирование, вынесите в фонфиге в отдельный лог-файл все debug-логи этого модуля и вообще все ошибки. Прологируйте детально все этапы с указанием количества найденных элементов, в общем всё, по порядку, что может пойти не так.
Откройте лог-файл командой tail -F my_log_file.log в терминале, и вы будете в реальном времени видеть всё, причем гораздо лучше, чем напечатанное принтом.
Вы можете убрать временно вообще все условия в фильтрации для поиска и проверить работает ли вывод и корректно ли сработает шаблон. А мы тут как заглянем в вашу БД? Может она пустая или вы коннектитесь не туда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы