Django Фильтр по цене
Изучаю Django и столкнулся с проблемой фильтрации товаров по цене. Если записываю диапазон фильтра как число, он отображается верно, от 0 до 1000, например, и бегунок бегает правильно и записанное число принимается правильно. А когда диапазон делаю от минимальной до максимальной цены товаров, он работает только от 0 до 100, будто в процентах.
Мои файлы:
filter.html
{% load static %}
<script type="text/javascript" src="{% static 'product-filter.js' %}"></script>
<h3 class="mb-4 border-bottom pb-1">Фильтры</h3>
<!-- Price Filter -->
<div class="card mb-4">
<h6 class="card-header">Цена</h6>
<div class="list-group list-group-flush">
<li class="list-group-item">
<input type="range" id="rangeInput" min={{minMaxPrice.price__min}} max={{minMaxPrice.price__max}} oninput="maxPrice.value=this.value" />
<p>{{minMaxPrice.price__min}}-{{minMaxPrice.price__max}}</p>
</li>
<li class="list-group-item">
Максимальная цена: <input type="number" onkeyup="rangeInput.value=this.value" id="maxPrice" min={{minMaxPrice.price__min}} max={{minMaxPrice.price__max}} />
</li>
</div>
</div>
<!-- Filter 1 -->
<div class="card mb-4">
<h6 class="card-header">Категории</h6>
<div class="list-group list-group-flush">
{% for cat in cats %}
<li class="list-group-item">
<input class="filter-checkbox" data-filter="category" value="{{cat.category__id}}" type="checkbox" />
{{cat.category__title}}
</li>
{% endfor %}
</div>
</div>
template_context.py
from .models import Product
from django.db.models import Min, Max
from django.db.models import FloatField
def get_filters(request):
cats = Product.objects.distinct().values('category__title', 'category__id')
minMaxPrice = Product.objects.aggregate(Min('price', output_field=FloatField()), Max('price', output_field=FloatField()))
data = {
'cats': cats,
'minMaxPrice': minMaxPrice,
}
return data
product-filter.js
$(document).ready(function(){
// Product Filter Start
$(".ajaxLoader").on('click',function(){
var _filterObj={};
$(".filter-checkbox").each(function(index,ele){
var _filterVal=$(this).val();
var _filterKey=$(this).data('filter');
_filterObj[_filterKey]=Array.from(document.querySelectorAll('input[data-filter='+_filterKey+']:checked')).map(function(el){
return el.value;
});
});
// Run Ajax
$.ajax({
url:'/filter-data',
data:_filterObj,
dataType:'json',
beforeSend:function(){
$(".ajaxLoader").show();
},
success:function(res){
console.log(res);
$(".ajaxLoader").hide();
}
});
});
// End
});
Причем и подпись диапазона фильтрации и минимум/максимум цены записаны одинаково, {{minMaxPrice.price__min}} {{minMaxPrice.price__max}}, но когда это заголовок фильтра, он показывает 149,99-1999,99, а когда фильтр выдает 0-100. Вроде и код проверил и пытался читать документы, но понять что не так не могу. Может я как то не правильно обозначаю min и max в "range"?
Ответы (1 шт):
Проблема снова в локализации, и запятых в числах. Нужно вернуть цены с точкой и фильтр их воспримет правильно.
