Django - Excel Рассчитать общее значение метода - PullRequest
0 голосов
/ 27 апреля 2020

Я создал модель данных, в которую пользователь загружает файл Excel и вычисляет строку и столбец

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)

    def __str__(self):
        return str(self.document)

    def amount(self):
        wb = xlrd.open_workbook(self.document.name)
        worksheet = wb.sheet_by_index(0)

        row_count = worksheet.nrows
        print(row_count)
        column_count = worksheet.ncols
        print(column_count)

        total_col_row = row_count * column_count

        # print payments
        payments = total_col_row * 9

        return payments

как получить общую сумму, если пользователь введет, например, 3 файла?

1 Ответ

0 голосов
/ 27 апреля 2020

Я думаю, что вы можете добавить 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...