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