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>
  • Вопрос задан
  • 909 просмотров
Пригласить эксперта
Ответы на вопрос 2
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
Почитайте доку по библиотеке django-filter, многое станет проще.
Ответ написан
@maunier
Евгений, лучше задайте вопрос на других ресурсах или телеграм ботах, там где уважают людей, а не показывают, насколько они умные. Я не говорю, что читать и изучать не нужно, но на других сервисах, вам дадут не только ответ, но и ссылку на конкретную страницу документации. А тут я часто замечаю такие ответы, поэтому решил написать, чтобы такие понторезы не мнили из себя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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