Как объединить аннотированные связанные объекты

Как вычислить количество_выпущенного из 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']
Вернуться на верх