Norwich
@Norwich
Web-developer

Как сделать сортировку по цене в django?

Имеется модель товара:
class Product(models.Model):
    """Товар"""
    name = models.CharField("Название", max_length=100)
    description = models.TextField("Описание")
    preview = models.ImageField("Изображение", upload_to="product_preview", null=True)
    room = models.ManyToManyField(Room, verbose_name="Комната")
    category = models.ForeignKey(Category, verbose_name="Категория", on_delete=models.CASCADE, null=True)
    manufacturer = models.ForeignKey(Manufacturer, verbose_name="Производитель", on_delete=models.CASCADE, null=True)
    width = models.IntegerField("Ширина", default=0)
    depth = models.IntegerField("Глубина", default=0)
    height = models.IntegerField("Высота", default=0)
    price = models.PositiveIntegerField("Цена", default=0, help_text="Укажите цену")
    hit = models.BooleanField(default=False)
    available = models.BooleanField(default=True)
    url = models.SlugField(max_length=160, unique=True)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("product_detail", kwargs={"slug": self.url})

    def preview_url(self):
        if self.preview and hasattr(self.preview, 'url'):
            return self.preview.url

    class Meta:
        verbose_name = "Товар"
        verbose_name_plural = "Товары"


Есть вот такая сортировка во view.py. Она сортирует по производителям и категориям:
class FilterProductBy(ModelForFilter, ListView):
    template_name = "shop/product/product_list.html"
    def get_queryset(self):
        queryset = Product.objects.filter(
            Q(manufacturer__name__in=self.request.GET.getlist("manufacturer")) |
            Q(category__name__in=self.request.GET.getlist("category"))
        )
        return queryset


Подскажите как сделать сортировку по цене (от .. до ..) имея вот такую форму на страничке:

<li><a href="#" onclick="openMenu('sub_menu_3');return(true)"><p>Цена</p></a>
        <ul id="sub_menu_3">
              от <input id='id66i1' class='range_inpt1' type='number' min='20' max='700'>
              -  до <input id='id66i2' class='range_inpt2' type='number' min='20' max='700'>
        </ul>
 </li>
  • Вопрос задан
  • 958 просмотров
Пригласить эксперта
Ответы на вопрос 2
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
Почитайте доку по библиотеке django-filter, многое станет проще.
Ответ написан
@maunier
Евгений, лучше задайте вопрос на других ресурсах или телеграм ботах, там где уважают людей, а не показывают, насколько они умные. Я не говорю, что читать и изучать не нужно, но на других сервисах, вам дадут не только ответ, но и ссылку на конкретную страницу документации. А тут я часто замечаю такие ответы, поэтому решил написать, чтобы такие понторезы не мнили из себя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы