Shshzik
@Shshzik
Начинающий

Как добавить элементы модели в конец списка?

Есть модель:
class A(models.Models):
    price = models.DecimalField(decimal_places=2, max_digits=12, default=0, verbose_name='Цена')
    stock = models.PositiveIntegerField(blank=True, default=0)


Мне нужно провернуть следующее.
Отсортировать по цене, но при этом, что бы элементы у которых stock = 0, были в конце списка.

Сделал так:
a = A.objects.all()
b = a.filter(stock__gt=0).order_by('-price')
c = a.filter(stock=0).order_by('-price')
x = set()
x.update(b)
x.update(c)
return list(x)

Только это не работает и элементы всё равно смешиваются в кучу. Как правильно решить эту задачу?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
maram4ik
@maram4ik
Python developer
from itertools import chain
b = a.filter(stock__gt=0).order_by('-price')
c = a.filter(stock=0)
x = chain(b, c)


Можно как то так
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Все просто прочитай что такое set тут и первые же ссылки дадут верный ответ.
Ответ написан
Astrohas
@Astrohas
Python/Django Developer
a = A.objects.all()
a.annotate(
        zero_price = Case(
            When(price=0, then=Value(1)),
            default = Value(0),
            output_field = IntegerField()
        )
    ).order_by("zero_price", "price")
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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