Python Django Аннотации над несколькими отношениями

У меня есть вопрос по аннотациям Django. Вот моя модель:

class Asset(models.Model):
    security = models.ForeignKey(Security, on_delete=models.CASCADE, blank=False)


class Batch(models.Model):
    fk_asset = models.ForeignKey(Asset, on_delete=models.CASCADE, blank=False)


class BatchPosition(models.Model):
    fk_batch = models.ForeignKey(Batch, on_delete=models.CASCADE)
    quantity = models.DecimalField(max_digits=14, decimal_places=2, blank=False)

По моему мнению, я хотел бы аннотировать общую сумму партий->-;количества к активу

Я пробовал такие вещи, как

Asset.objects.annotate(Sum("batch")).annotate(Sum("batchposition__quantity"))

... но не могу заставить его работать. Что я делаю не так? Можно ли, наконец, добиться этого?

Вам не нужна сумма партий каждого актива.

Для получения суммы количества BatchPosition каждой партии на активе вы можете проследить взаимосвязь напрямую, используя '__'. Так, если мы установим related_name в batches на fk_asset в модели Batch и batch_positions на fk_batch в модели BatchPosition, мы можем аннотировать сумму следующим образом:

Asset.objects.annotate(batch_positions_sum(Sum('batches__batch_positions__quantity'))

Похоже, что вам не помешали бы дополнительные материалы по агрегации DB в Django ORM

Django Aggregation

Вернуться на верх