William
William

Reputation: 115

Output calculations to template

I want to perform row level math on a model and display the results in the template. The database has a row for each company per day.

class MyModel(models.Model):
    company = model.CharField(...
    daily_target = model.PositiveSmallIntger(...
    actual =  model.PositiveSmallIntger(...
    date = model.DateField(...

In the template I'd want to display the result of 100 * actual / daily_target for the logged-in company. I have no problem doing this in the python interpreter but am confused about how to do this with views & templates.

Upvotes: 0

Views: 45

Answers (1)

Alasdair
Alasdair

Reputation: 309109

You could add a property to the model:

class MyModel(models.Model):
    company = model.CharField(...
    daily_target = model.PositiveSmallIntger(...
    actual =  model.PositiveSmallIntger(...
    ...

    @property
    def pct_target(self):
        return 100. * self.actual / self.daily_target

Then in your template:

{% for item in queryset %}
    {{ item.pct_target }}
{% endfor %}

The disadvantage of this is that you cannot filter or order the queryset by the property. Another option would be to annotate your queryset with the calculated field.

Upvotes: 1

Related Questions