我有以下型号:
class Product(models.Model):
name = models.CharField(max_length=50)
stock_quantity = models.IntegerField()
class Variation(models.Model):
parent_product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='variations')
stock_quantity = models.IntegerField()
我想要做的是按stock_quantity 对产品查询集进行排序。
现在我有两种产品:
对于可变产品,我希望所有变化库存数量的总和与排序相关。
我该怎么做?
我确实对注释和聚合有一些想法,但不确定如何将它们组合在一起。
Product.objects.alias(true_quantity=Case(When(stock_quantity__isnull=True, then=Sum("variation__stock_quantity")), default=F('stock_quantity')).order_by('true_quantity')
alias() 允许在结果集中添加其他列,例如相关列或计算列(
alias()
在使用 Python 操作行时不会公开该值,如果您希望 true_quantity
为已返回)。Case()/When()允许条件表达式。 上述查询应该会产生您的结果,如果有任何不清楚的地方请告诉我