Я кодирую приложение электронной коммерции с помощью Django, и я нахожусь в процессе создания системы фильтрации для поисковых запросов. Это список, в котором отображаются элементы:
class PostListView(ListView):
model = publicaciones
template_name = 'store/search.html'
context_object_name = 'queryset'
ordering = ['Promocionado']
paginate_by = 2
def get_queryset(self):
qs = self.model.objects.all().order_by('id')
search = self.request.GET.get('q')
if search:
qs = qs.filter(Título__icontains=search)
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
MyFilter = PubFilters(self.request.GET, queryset=self.get_queryset())
context['filter'] = MyFilter
context['filtered_items'] = MyFilter.qs
context['count'] = self.get_queryset().count()
context['búsqueda'] = self.request.GET.get('q')
return context
Это фильтр:
import django_filters из .models import publicaciones
class PubFilters(django_filters.FilterSet):
o = django_filters.OrderingFilter(
fields=(
('Fecha', 'Más nuevo'),
),
)
class Meta:
model = publicaciones
fields = ['Precio', 'Categoría']
Проблема в том, что если Я ищу что-то, а затем пытаюсь применить фильтр, запрос, который я искал, удаляется и отображается как «Нет». Любая помощь будет оценена
РЕДАКТИРОВАТЬ: Это шаблон:
{% extends 'store/store.html' %}
{% load static %}
{% load crispy_forms_tags %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style_search.css' %}">
{% block content %}
<div class="container">
<form method="GET">
{{ filter.form|crispy }}
<button class="btn btn-primary" type="submit">Buscar</button>
</form>
</div>
<h3>{% if count == 0 %}
Ningún resultado para
{% elif count == 1 %}
{{ count }} resultado para
{% else %}
{{ count }} resultados para
{% endif %}
"{{ búsqueda }}"
</h3>
{% for q in filtered_items %}
<div class="col-md-3 clearfix d-none d-md-block">
<div class="card mb-2">
<img class="card-img-top" src="{{ q.Fotos.url }}" width="250">
<div class="card-body">
<div class="card-title">
<h1><a href="{% url 'detail' q.pk %}">{{ q.Título }}</a></h1>
</div>
<div class="card-text">
<h5>{{ q.Precio }}$</h5>
</div>
<div class="card-text">
<h5>{{ q.Fecha }}</h5>
</div>
</div>
</div>
</div>
{% endfor %}
{% if is_paginated %}
{% if page_obj.has_previous %}
<a class="btn btn-outline-info mb-4" href="?page=1{% if búsqueda %}&q={{ búsqueda }}{% endif %}">Primera</a>
<a class="btn btn-outline-info mb-4" href="?page={{ page_obj.previous_page_number }}{% if búsqueda %}&q={{ búsqueda }}{% endif %}">Anterior</a>
{% endif %}
{% for num in page_obj.paginator.page_range %}
{% if page_obj.number == num %}
<a class="btn btn-info mb-4" href="?page={{ num }}{% if búsqueda %}&q={{ búsqueda }}{% endif %}">{{ num }}</a>
{% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
<a class="btn btn-outline-info mb-4" href="?page={{ num }}{% if búsqueda %}&q={{ búsqueda }}{% endif %}">{{ num }}</a>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<a class="btn btn-outline-info mb-4" href="?page={{ page_obj.next_page_number }}{% if búsqueda %}&q={{ búsqueda }}{% endif %}">Siguiente</a>
<a class="btn btn-outline-info mb-4" href="?page={{ page_obj.paginator.num_pages }}{% if búsqueda %}&q={{ búsqueda }}{% endif %}">Última</a>
{% endif %}
{% endif %}
{% endblock content %}