@popkanosoroga

Сортировка товаров Django?

Добрый вечер.
Решил сделать сортировку товаров на странице, по одному параметру понятно как это сделать, а вот по двум или трем нет. Смотрел форумы и книги все умалчивают эту тему или оставляют без ответа.
Пока что надумал два типа сортировки:
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? Что бы не писать все возможные комбинации сортировки.
  • Вопрос задан
  • 506 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Jack444
Так и так простое решение, в get параметр можно через запятую фильтры внести как один из вариантов.
if sort := self.request.GET.get('sort'):
    queryset.order_by(*sort.split(','))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы