如何计算OrderedProduct中的quantity_release ?
我不能只用self.product_reservation.aggregate(total=Sum('quantity_released'))
因为你不能聚合函数甚至属性。我已经尝试了额外的和子查询与注释,但不能使它。
class OrderProduct(models.Model):
...
quantity_ordered = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
# TODO
def quantity_released(self):
return self.product_reservations.all()
class ProductReservation(models.Model):
...
order_product = models.ForeignKey("documents.OrderProduct", related_name='product_reservations' ,on_delete=models.CASCADE, blank=True, null=True)
product_release = models.ManyToManyField("documents.ProductRelease", related_name='products_reservation', blank=True)
def quantity_released(self):
return self.product_release.all().aggregate(total=Sum('quantity'))['total']
class ProductRelease(models.Model):
...
quantity = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
PS:如果我键入了太不准确的标题,请编辑它,因为我不知道如何更好地表达它。谢谢你。
好了,经过一天的阅读和寻找这个问题的答案-我做到了,并在这个过程中学到了很多东西。不需要使用任何子查询,Q, F, Case, When等。只需要给双下划线查找外键。就是这样。
def quantity_released(self):
return self.product_reservations.all().aggregate(total=Sum('product_release__quantity'))['total']