Как объединить аннотированные связанные объекты
Как вычислить количество_выпущенного из OrderedProduct?
Я не могу просто 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']