robtus88
robtus88

Reputation: 490

Sum of fields for filtered queryset using django_filters

I have the following view

class AuthorList(FilterView):
    model = Author
    filterset_class = AuthorFilter
    context_object_name = 'authors'

In the template, one of the field is {{ author.value }}, which is an integer.

What I would like to do is to show the sum of all {{ author.value }} in my template, but in a dynamic way (if some filters are used, the sum is updated with the current Queryset).

I have tried adding extra context with get_context_data but I couldn't find out how to make it in a dynamic way.

EDIT

tried this, still not working:

    @property
    def get_sum_values(self):
        sum_values = self.objects.all().aggregate(Sum('value'))['value__sum']
        return sum_values

and in the template: {{ authors.get_sum_values }}

I have also tried to add a print statement in the property, but nothing shows up, so I guess the function is not even loaded.

my models:

class Author(models.Model):
    name = models.CharField(max_length=50, blank=True, null=True)
    value = models.IntegerField(null=True, blank=True)

Upvotes: 1

Views: 1731

Answers (1)

Darren-Jaen
Darren-Jaen

Reputation: 135

Have you tried doing the sum in the model as a function ?

@property
def wallet_amount_guests(self):

    data_payments = self.user.earnings_set.filter(transaction_type='g').aggregate(Sum('amount'))['amount__sum']

    if data_payments == None:
        data_payments = 0

    return data_payments

The above is just an example I have used before. You can then call in the html as blah.function_name

Upvotes: 1

Related Questions