Reputation: 33
Suppose I have 2 models Customer & Account.
Models
class Account(models.Model):
customer = models.ForeignKey(Customer,on_delete=models.CASCADE,
blank=True,null=True,related_name='account')
desc = models.CharField(max_length=100)
paid = models.IntegerField(default=0)
received = models.IntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
class Customer(models.Model):
name = models.CharField(max_length=30,unique=True)
contact = models.CharField(max_length=10)
I want to access Sum of received & Sum of paid field in template
Customer View
def show_customer(request,id=None):
customer = Customer.objects.filter(user=request.user)
return render(request,'customer/show_customer.html',{'customer':customer})
show_customer.html
<html>
{% for cust in customer %}
{{cust.name}}
{{cust.contact}}
**Here I want sum of paid & sum of receive for current customer**
</html>
Upvotes: 1
Views: 416
Reputation: 372
You can make use of django models @property
decorator.
Your Customer model
class Customer(models.Model):
name = models.CharField(max_length=30,unique=True)
contact = models.CharField(max_length=10)
@property
def received_amount(self):
return self.account.all().aggregate(Sum('received'))['received__sum']
@property
def paid_amount(self):
return self.account.all().aggregate(Sum('paid'))['paid__sum']
And then you can access it in your template
<html>
{% for cust in customer %}
{{cust.name}}
{{cust.contact}}
{{ cust.received_amount }}
{{ cust.paid_amount }}
</html>
Hope this will help you out!
Upvotes: 3