Поиск по сайту django

На главной странице отображается таблица со всеми протоколами, необходимо сделать поиск на сайте по Наименованию задачи (task_name) и должна выводится такая же таблица как и на главной, но с задачами, которые пытаются найти. Перепробовав разные способы, пересмотрев различные видео, у меня так и не получилось это сделать.

views.py

class Search(ListView):
model = Protocol
template_name = 'protocols/index.html'
context_object_name = 'protocol'

def get_queryset(self):
    return Protocol.objects.filter(task_name__iregex=self.request.GET.get('q'))

def get_context_data(self, *, object_list=None, **kwargs):
    context = super().get_context_data(**kwargs)
    context['q'] = self.request.GET.get('q')
    return context

url.py

path('search/', Search.as_view(), name='search')

форма

<form class="d-flex" data-bs-theme="light" method="GET" action="{% url 'search' %}">
  <input class="form-control me-sm-2" type="text" name="q" placeholder="Поиск по таблице">
  <button class="btn btn-secondary my-2 my-sm-0" type="submit">Найти</button>
</form>

таблица в index.html

<thead>
 <tr>
  <th scope="col">№</th>
  <th scope="col">Наименование задачи</th>
  <th scope="col">Дата постановки</th>
  <th scope="col">Крайний срок исполнения</th>
  <th scope="col">Служба/отдел/подразделение</th>
  <th scope="col">Ответственные лица</th>
  <th scope="col">Комментарий</th>
  <th scope="col">Действия</th>
 </tr>
</thead>
<tbody>
{% for protocol in protocols %}
 <tr>
  <td>{{ protocol.task_number }}</td>
  <td>{{ protocol.task_name|truncatewords:4 }}</td>
  <td>{{ protocol.date|date:"j E Y" }}</td>
  <td>{{ protocol.deadline|date:"j E Y" }}</td>
  <td>{{ protocol.service|truncatewords:4 }}</td>
  <td>{{ protocol.face }}</td>
  <td>{{ protocol.comm|truncatewords:3 }}</td>

Решился вопрос. Через shell django просмотрел как выглядит и что содержит модель, не отображалось содержимое поля task_name. Наверное глупости сделал, но удалил папку виртуальной среды, удалил миграции, заново создал виртуальную среду, миграции и поиск по нужному полю сработал :)

Вернуться на верх