Я думаю, что вы можете добавить amount
в качестве DecimalField
вашей модели и вычислить ее после создания объекта, затем сигнал post_save
. Затем добавьте метод stati c, который просто суммирует все ваши суммы.
from django.db.models import Sum
from django.dispatch import receiver
class Data(models.Model):
""" Model of Data"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
document = models.FileField(upload_to="documents/%Y/%m/%d")
uploaded_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(default=0, max_digits=4, decimal_places=2, blank=True, null=True)
def __str__(self):
return str(self.document)
@property
def total_amount():
return Data.objects.all().aggregate(Sum('amount '))['amount __sum']
def calculate_amount(self):
wb = xlrd.open_workbook("documents/%Y/%m/%d"+self.document.name)
...
@receiver(post_save, sender=Data)
def data_amount_post_save(sender, instance, created, **kwargs):
instance.amount= instance.calculate_amount()
instance.save()