Фильтрация и сортировка объектов по минимальной цене и максимальной цене

#python #html #django #django-models #django-views

#python #HTML #django #django-модели #django-просмотры

Вопрос:

Я описал модель продукта следующим образом: models.py

 class Product(models.Model):
category = TreeManyToManyField(ProductCategory, blank=True, symmetrical=False, related_name='products',
                               verbose_name='Категория->Подкатегория')
name = models.CharField(max_length=200, db_index=True, verbose_name='Наименование товара')
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Цена')
  

В views.py:

 def product_list(request, category_slug=None):
category = None
categories = ProductCategory.objects.filter(available=True, is_active=True)
object_list = Product.objects.filter(available=True, is_active=True)
if category_slug:
    category = get_object_or_404(ProductCategory, slug=category_slug)
    object_list = object_list.filter(category=category)
paginator = Paginator(object_list, 16)
page = request.GET.get('page')
try:
    products = paginator.page(page)
except PageNotAnInteger:
    products = paginator.page(1)
except EmptyPage:
    products = paginator.page(paginator.num_pages)
return render(request, 'shop/products/list_by_category/product_list.html', {'category': category,
                                                                            'categories': categories,
                                                                            'products': products,
                                                                            })
  

Проблема в том, что я хочу отсортировать товары по самой низкой цене или по самой высокой цене (то есть отображать товары в порядке цены min_price и цены max_price).
В шаблоне у меня есть форма сортировки:

 <div class="secand_fillter">
    <h4>sort by price:</h4>
    <select class="selectpicker">
        <option>descending price</option>
        <option>ascending price</option>
    </select>
</div>
  

Насколько я правильно понимаю, необходимо отправить параметр, по которому товары будут отсортированы, используя метод GET, а в представлении, переопределив метод get_queryset (получив параметр сортировки), вернуть список товаров обратно.

Ответ №1:

По возрастанию

 object_list = Product.objects.filter(available=True, is_active=True).order_by('price')
  

По убыванию

 object_list = Product.objects.filter(available=True, is_active=True).order_by('-price')
  

Комментарии:

1. Спасибо за ваш ответ! Но я, вероятно, плохо сформулировал вопрос. Я постараюсь исправиться. — На уровне шаблона у меня есть форма, в которой есть две кнопки сортировки: «цена по убыванию» и «цена по возрастанию».