Добрый вечер.
Решил сделать сортировку товаров на странице, по одному параметру понятно как это сделать, а вот по двум или трем нет. Смотрел форумы и книги все умалчивают эту тему или оставляют без ответа.
Пока что надумал два типа сортировки:
1) По базе данных когда кликаешь на категорию товара которая указана в его модели;
2) Или когда получаешь GET запрос через адресную строку и сортируешь queryset, например как у меня по цене;
Views.py
class ProductList(ListView):
model = Product
paginate_by = 6
template_name = 'Product/prod.html'
# Фильтрация и сортировка товаров на странице
def get_queryset(self):
queryset = super(ProductList, self).get_queryset().order_by('id')
category_id = self.kwargs.get('category_id')
sort = self.request.GET.get('sort')
if category_id:
return queryset.filter(category_id=category_id)
if sort == ('price'):
return queryset.order_by('price')
if sort == ('-price'):
return queryset.order_by('-price')
else:
return queryset
html code
<div class="sorted-list">
<form action="{% url 'prod' %}" method="get">
<ul>
<li><input type="radio" name="sort" value="price">Недорогие
<li><input type="radio" name="sort" value="-price">Дорогие
<ul>
<button type='submit'>Применить</button>
</form>
</div>
<h2>Товары</h2>
<div class="category-list">
<div class="category">
<table>
<tr><b>Категории:</b></tr>
{% for category in category %}
<tr><a href = "{% url 'category' category.id %}">{{ category.name }}</a></tr>
{% endfor %}
</table>
</div>
</div>
Как вот мне например перейти в какую то категорию и там отсортировать товары по цене или по цвету или размеру. Интересует больше бэкенд
Есть ли какое то простое решение в Django? Что бы не писать все возможные комбинации сортировки.