简体   繁体   中英

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!

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.objects.aggregate(value=Sum(F('field_a') * F('field_b') * F('parent__factor'), output_field=DecimalField()))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM