winordie
@winordie
Лучшая документация -- исходники

Как оптимально отсортировать по необязательной связаной таблице?

Продолжим уже начатую тему фильтрации
Продублирую вводную часть:
Имеется 2 таблицы:
class Sale(models.Model):
  percent = models.FloatField()

class Product(models.Model):
  sale = models.ForeignKey(Sale, null=True, blank=True)
  price = models.FloatField()

Необходимо отсортировать товары по цене. При этом на цену может влиять скидка, т.е. товар ценой в $120 с 50% скидкой ($60) должен быть до товара ценой в $80 при сортировке по возрастанию.

Трюк с прошлого раза не подойдет полагаю, т.к. нельзя сортировать по полю, а если оно NULL то брать значение из другого поля. Или я ошибаюсь?
---------------------------
Точно ошибаюсь
products = Product.objects.annotate(
    price_with_sale=F('price')*(1-F('sale__percent'))
).filter(
    Q(price__range=(10, 80, price_with_sale__isnull=True)) | Q(price_with_sale__range=(10, 80))
)
products = products.order_by(Coalesce('price_with_sale', 'price').asc())
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
winordie
@winordie Автор вопроса
Лучшая документация -- исходники
Похоже я туплю
products = Product.objects.annotate(
    price_with_sale=F('price')*(1-F('sale__percent'))
).filter(
    Q(price__range=(10, 80, price_with_sale__isnull=True)) | Q(price_with_sale__range=(10, 80))
)
products = products.order_by(Coalesce('price_with_sale', 'price').asc())
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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