Django - проблема с добавлением дополнительной переменной в контекст, которая будет подсчитывать совпавшие фильтры?
У меня есть функция, которая дает мне HTML с отфильтрованными товарами на основе нескольких фильтров, которые пользователи могут использовать на сайте. Фильтры представляют собой список флажков (конечно, с множественным выбором).
Мне удалось передать название продукта, но я также хочу добавить количество совпавших вариантов рядом с каждым названием продукта, так что если пользователь выберет 3 из 8 флажков в списках Filter 1 и Filter 2, то список совпавших названий продуктов и количество совпавших фильтров будет обновлен.
На данный момент страница выглядит следующим образом:
Я хочу вот что:
Где 3 означает, что этот продукт соответствует всем 3 выбранным мною вариантам, а второй продукт с 1 означает, что только 1 вариант соответствует из фильтра 1 и фильтра 2.
Я предполагаю, что мне нужно добавить аннотацию с методом Count, но как я могу это сделать, если мои fulter1 и filter2 - это список, а не queryset. views.py
def filter_data(request):
filter1 = request.GET.getlist('filter1[]')
filter2 = request.GET.getlist('filter2[]')
product_list = Product.objects.all()
if len(filter1) > 0:
product_list = product_list.filter(filter1__title__in=filter1).distinct() # how to add matched_products_count in here?
if len(filter2) > 0:
product_list = product_list.filter(filter2__title__in=filter2).distinct() # how to add matched_products_count in here?
context = {
'product_list': product_list,
'filter1': filter1,
'filter2': filter2,
}
product_ajax_template = render_to_string('product-list-ajax.html', context)
return JsonResponse({'data': product_ajax_template})
htmml
{% for product in product_list %}
<p>{{product.title}} - {{product.matched_products_count}}</a>
{% endfor %}
Если вам не нужно считать ничего особенного и вам нужно знать длину списка, почему бы просто не посчитать его элементы с помощью python, ведь существует встроенная функция LEN() для получения общего количества элементов в списке, кортеже, массивах, словаре,
len(list_name)