Элементы порядка Django по двум полям, но игнорируя их, если они равны нулю

У меня есть следующая модель (значительно упрощенная для для целей этого вопроса):

class Product(models.Model):
    price = models.DecimalField(max_digits=8, decimal_places=2)
    sale_price = models.DecimalField(max_digits=10, blank=True, null=True, decimal_places=2)

Для большинства товаров будет указана цена, а не указана sale_price. Итак, я могу заказать продукты по цене следующим образом:

Product.objects.order_by('price')
Product.objects.order_by('-price')

Однако у некоторых продуктов будет sale_price, и я не могу найти способ аккуратно их заказать, чтобы цена со скидкой чередовалась с нормальной ценой. Если я попробую сделать заказ по обоим полям:

Product.objects.order_by('sale_price','price')

... тогда все товары, которых нет в продаже, появятся вместе, а за ними все, что есть, вместо того, чтобы чередовать цены.

Есть ли в этом смысл? У кого-нибудь есть способ решить эту проблему?

Спасибо!

16
задан Ben 14 May 2011 в 10:30
поделиться