Контекст должен быть диктой, а не модулем
Когда я фильтрую строку поиска, я получаю эту ошибку. Я не уверен, что я делаю неправильно
Просматриваю этот учебник: https://www.youtube.com/watch?v=llbtoQTt4qw&t=3399s
views.py
class pplList(LoginRequiredMixin,ListView):
model = People
context_object_name = 'people'
def get_context_data(self, **kwargs):
search_input = self.get.GET.get('search-area') or ''
if search_input:
context['people'] = context['people'].filter(name__icontains=search_input)
return context
people_list.html
{%if request.user.is_authenticated %}
<p>{{request.user}}</p>
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Login</a>
{% endif %}
<hr>
<h1>Interviewee Dashboard {{color}}</h1>
<a href="{% url 'pplCre' %}"> Add Candidates</a>
<form method="get">
<input type = 'text' name = 'search-are'>
<input type = 'submit' value = 'Search'>
</form>
<table>
<tr>
<th> Item</th>
<th> </th>
</tr>
{% for people in people %}
<tr>
<td>{{people.name}}</td>
<td><a href="{% url 'pplDet' people.id %}">View</a></td>
<td><a href="{% url 'pplUpd' people.id %}">Edit</a></td>
<td><a href="{% url 'pplDel' people.id %}">Delete</a></td>
</tr>
{% empty %}
<h3>No items in list</h3>
{% endfor %}
</table>
Есть несколько незначительных ошибок, например, это должно быть self.request.GET.get('search-area')
, также вы не вызвали метод super()
, поэтому попробуйте этот вид:
class pplList(LoginRequiredMixin,ListView):
model = People
context_object_name = 'people'
def get_context_data(self, **kwargs):
context=super().get_context_data(**kwargs)
search_input = self.request.GET.get('search-area', False)
if search_input:
context['people']= People.objects.filter(name__icontains=search_input)
return context
Кроме того, представления на основе классов обычно пишутся в PascalCase, поскольку они являются классами Python и требуют, чтобы их имя записывалось как имя модели в качестве префикса и фактическое имя представления в качестве суффикса, поэтому оно должно быть PeopleListView
.