gpt4 book ai didi

django - Django按两个字段订购商品,但如果它们为零则忽略它们

转载 作者:行者123 更新时间:2023-12-03 14:42:39 25 4
gpt4 key购买 nike

我有以下模型(出于这个问题的目的,已大大简化):

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')


...然后所有未销售的产品一起出现,然后再出现所有这些,而不是相互交错的价格。

这有意义吗?有谁有办法解决这个问题?

谢谢!

最佳答案

您可以使用extra()QuerySet方法在SQL中使用COALESCE函数在查询中创建一个额外的字段,该函数返回它传递的第一个非NULL值。

Product.objects.extra(select={"current_price":"COALESCE(sale_price, price)"}, order_by=["-current_price"])


就其余ORM而言,您必须将order_by放入extra()调用中,因为额外的手动字段“实际上并不存在”,但是语法与普通的Django order_by()相同。

请参阅此处的extra()文档: http://docs.djangoproject.com/en/1.3/ref/models/querysets/#extra

关于django - Django按两个字段订购商品,但如果它们为零则忽略它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com