Django - Как показать все отфильтрованные продукты с одинаковыми атрибутами в шаблоне, но только один общий атрибут должен быть показан для фильтрации?

Как объединить отфильтрованные результаты с одинаковым значением/именем в один и отобразить все объекты, имеющие эти конкретные значения/имена?

В моем store/views.py я получил следующее:

def filter_data(request):
    """
    Using ajax to return products that are being filtered by category.
    :param request:
    :return:
    """
    category_ids = request.GET.getlist('category-id[]')
    product_prices = request.GET.getlist('price[]')
    variations = request.GET.getlist('variation[]')
    if request.session['prod_asc'] == 'ascending':
        products = Product.objects.all().filter(is_available=True).order_by(
            'created_date').distinct()
    else:
        products = Product.objects.all().filter(is_available=True).order_by(
            '-created_date').distinct()
    # Filter products by category
    if len(category_ids) > 0:
        products = products.filter(category__id__in=category_ids).distinct()
    # Filter products by prices
    if len(product_prices) > 0:
        products = products.filter(price__in=product_prices).distinct()
    # Filter products by variations
    if len(variations) > 0:
        products = products.filter(variation__id__in=variations).distinct()
    t = render_to_string('product-list.html', {'data': products[
                                                       :AMOUNT_PRODS_SHOW]})  # Default amount of products show for
    # filtering products based on category is 99 products
    return JsonResponse({'data': t})

В моем js файле я получил следующее:

$(document).ready(function(){
    $(".ajaxLoader").hide();
    $(".filter-checkbox").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:'/store/filter_data',
            data:_filterObj,
            dataType:'json',
            beforeSend:function(){
                $(".ajaxLoader").show();
            },
            success:function(res){
                $("#filteredProducts").html(res.data);
                $(".ajaxLoader").hide();
            }
        });
    });
});

В моем обычном шаблоне store.html я получил следующее:

<div class="single-widget pb-50 mb-50">
                                <h4 class="widget-title">Filter By Variation</h4>
                                <div class="widget-category-list scroll-box-default">
                                    {% for variation in variations|dictsort:"variation_category" %}
                                        <div class="single-widget-category">
                                            <input type="checkbox" data-filter="variation" value="{{ variation.id }}" class="filter-checkbox" id="variation-{{ variation.id }}">
                                                <label for="variation-{{ variation.id }}">{{ variation.variation_value }}
                                                    </label>
                                        </div>
                                    {% endfor %}
                                </div>
                            </div>

В моем product_list.html, который будет показывать результаты Javascript/Jquery внутри store.html при установке флажков для фильтрации товаров - я получил следующее:

Я хочу иметь возможность показывать продукты с одинаковыми атрибутами, например, если оба продукта имеют одинаковый размер: Medium. Сейчас, как показано на рисунке ниже, мой код выводит список, например, size: Medium дважды, и покупателю нужно дважды отметить флажками поля со значением Medium, чтобы показать два продукта с размером Medium. Суть в том, что я хочу перечислить, например, размер Medium один раз - клиент проверяет поле Medium - все продукты, получившие значение Medium, будут показаны в качестве результатов. Как это сделать с текущим кодом, не изменяя базовые модели?

enter image description here

Вернуться на верх