1 回答

TA貢獻1841條經驗 獲得超3個贊
我認為您可以將其添加amount為DecimalField模型,并在創建對象后對其進行計算,然后發送post_save信號。然后添加一個簡單地匯總所有金額的靜態方法。
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()
添加回答
舉報