[Django]-Django aggregation across multiple tables in ModelAdmin queryset

0👍

The best way I found to return the correct results was by using queryset.extra().

derp_r1_sum_select = """
    select sum(`derp_related_1`.`amount`)
    from `derp_related_1` 
    where `derp_related_1`.`fk` = `derp`.`pk`
    """
derp_r2_sum_select = """
    select sum(`derp_related_2`.`amount`)
    from `derp_related_2`
    where `derp_related_2`.`fk` = `derp`.`pk`"
    """

def queryset(self, request):
        qs = super(DerpAdmin, self).queryset(request)
        qs = qs.extra(select={'derp_r1_sum': derp_r1_sum_select,
                              'derp_r2_sum': derp_r2_sum_select})
        return qs

0👍

If you want to stay within Django’s queryset, I would consider creating a model superclass that shares the related and common fields and sub-classing for further distinctions. Otherwise, you need to either write custom SQL or get out of the database ORM entirely and manipulate your data in python with Queryset.values or Queryset.values_list

👤Dave

Leave a comment