Прежде всего, я использовал django_filters
, который имеет следующий код:
from .models import Product
import django_filters
class ProductFilter(django_filters.FilterSet):
product_name = django_filters.CharFilter(lookup_expr='icontains', label='Product Name')
product_price = django_filters.NumberFilter()
product_price__gt = django_filters.NumberFilter(field_name='product_price', lookup_expr='gt', label='Min Price')
product_price__lt = django_filters.NumberFilter(field_name='product_price', lookup_expr='lt', label='Max price')
hotel_location = django_filters.CharFilter(lookup_expr='icontains', label='hotel location')
class Meta:
model = Product
fields = ['product_name', 'product_price', 'vendor_name', 'hotel_location']
Код шаблона для вышеуказанного фильтра:
<table id="myTable">
<thead>
<tr>
<th>Image</th>
......
</tr>
</thead>
<tbody >
{% for lap in filter.qs|slice:":20" %}
<tr >
<td class="col-sm-3">
<div >
<div class="product-image-wrapper">
<div class="single-products">
<div class="productinfo text-center">
<img src="{{ lap.product_image }}" alt="" />
</div>
</div>
</div>
</div>
</td>
.......
</tr>
.......
{% endfor %}
</tbody>
</table>
Файл views.pyследующий код для него:
def searchTable(request):
product_list = Product.objects.all()
product_filter = ProductFilter(request.GET, queryset=product_list)
return render(request, 'searchTable.html', {'filter': product_filter})
Но у меня есть другая форма поиска, которая находится в базовом шаблоне.Код для этого:
<form class="navbar-form" method="post" action="{% url 'searchTable' %}" ">
{% csrf_token %}
<input type="text" name="srh" class="form-control" placeholder="Search To Compare Products">
<button class="btn btn-secondary" type="submit"></button>
</div>
</form>
Файл views.py имеет следующий код для этого:
def tablesorter(request):
if request.method == 'POST':
srch = request.POST['srh']
if srch:
match = Product.objects.filter(Q(product_name__icontains=srch)
| Q(vendor_name__icontains=srch)
| Q(hotel_location__icontains=srch))
if match:
return render(request, 'searchTable.html', {'sr':match})
else:
messages.error(request, 'No result found')
else:
return HttpResponseRedirect('tablesorter')
return render(request, 'searchTable.html')
Теперь мой вопрос: я хочу показать результаты поиска для моего представления фильтраи поиск формы просмотра.Каким будет код этого цикла, чтобы он работал для обоих:
{% for lap in filter.qs|slice:":20" %}
<tr >
<td class="col-sm-3">
<div >
<div class="product-image-wrapper">
<div class="single-products">
<div class="productinfo text-center">
<img src="{{ lap.product_image }}" alt="" />
</div>
</div>
</div>
</div>
</td>
.......
</tr>
.......
{% endfor %}
Каким-то образом мне нужно передать переменную sr
в вышеуказанном цикле.Но как?Пожалуйста, помогите ...