tianz tianz - 2 months ago 11
Python Question

Django: How do I use a foreign key field in aggregation?

Let's say I have the following two models:

class Parent(models.Model):
factor = models.DecimalField(...)
... other fields

class Child(models.Model):
field_a = models.DecimalField(...)
field_b = models.DecimalField(...)
parent = models.ForeignKey(Parent)
... other fields


Now I want to calculate the sum of
(field_a * field_b * factor)
of all objects in the
Child
model. I can calculate the sum of
(field_a * field_b)
with
aggregate(value=Sum(F('field_a')*F('field_b'), output_field=DecimalField()))
. My question is how I can pull out the
factor
field from the
Parent
model?

I am new to Django and I really appreciate your help!

Answer

Django let's you follow relationships with the double underscore (__) as deep as you like. So in your case F('parent__factor') should do the trick.

The full queryset:

Child.aggregate(value=Sum(F('field_a') * F('field_b') * F('parent__factor'), output_field=DecimalField()))