Django List View get_queryset не отображает все объекты
У меня есть следующий ListView, который я хочу использовать также для фильтрации результатов
class Membresias(ListView):
model = Cliente
template_name = 'main/membresias.html'
def get_queryset(self):
nombre = self.request.GET.get('nombre')
if nombre is None:
return Cliente.objects.all()
else:
return Cliente.objects.filter(nombre = nombre).values()
когда переменная 'nombre' не является None, она показывает результаты, ПРОБЛЕМА: но когда я оставляю ее пустой или равной None, она не показывает никаких записей вообще, а согласно валидации набор запросов должен получить все записи.
Вот часть html для таблицы
<div class = "container">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nombre</th>
<th scope="col">Email</th>
<th scope="col">Teléfono</th>
<th scope="col">Activo</th>
</tr>
</thead>
<tbody>
{% for cliente in object_list %}
<tr>
<th scope="row"><a href="{{ cliente.get_absolute_url }}">{{cliente.id}}</a></th>
<td>{{cliente.nombre}}</td>
<td>{{cliente.email}}</td>
<td>{{cliente.telefono}}</td>
{% if cliente.activo == False %}
<td><input type="checkbox" readonly class="form-check-input mt-1" id="Estatus" disabled value={{cliente.activo}}></td>
{% else %}
<td><input type="checkbox" readonly class="form-check-input mt-1" checked id="staticEmail" disabled value={{cliente.activo}}></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
Вы можете проверить правдивость nombre и если nobre None или пусто (''), работайте с:
class Membresias(ListView):
model = Cliente
template_name = 'main/membresias.html'
def get_queryset(self):
nombre = self.request.GET.get('nombre')
if not nombre:
return Cliente.objects.all()
else:
return Cliente.objects.filter(nombre=nombre)
в return Cliente.objects.filter(nombre = nombre).values() метод .values() преобразует запрос из экземпляра модели в словарь paython, что может быть проблемой,
попробуйте отбросить .values()
return Cliente.objects.filter(nombre = nombre)