Продолжим уже начатую тему
фильтрации
Продублирую вводную часть:
Имеется 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())