如何总结Django选择的金额

时间:2019-06-17 05:42:29

标签: django model

鉴于我必须使用django选项选择金额,因此我试图在列中查找材料成本的总额。

我尝试使用self.amount1+ self.amount2添加无济于事。

PO_STEEL_COST_CHOICES = (
    ('10000' ,'10000'),
    ('20000','20000'),
    ('30000','30000'),
    ('40000','40000'),
    )

PO_ELECTRICAL_MATERIAL_CHOICES = (
    ('10000' ,'10000'),
    ('20000','20000'),
    ('30000','30000'),
    ('40000','40000'),
    )

PO_SUBCONTRACTORS_CHOICES = (
    ('10000' ,'10000'),
    ('20000','20000'),
    ('30000','30000'),
    ('40000','40000'),
    )

class ProcurementTeam(models.Model):
    project_name = models.OneToOneField(Project, on_delete=models.DO_NOTHING)
    po_steel = models.FileField(upload_to='files/ProcurementTeam/posteel/%Y/%m/%d/', blank=True, null=True)
    po_steel_cost = models.CharField(max_length=120,choices=PO_STEEL_COST_CHOICES, default='None', blank=True)
    po_electrical_materials = models.FileField(upload_to='files/ProcurementTeam/poelectrical/%Y/%m/%d/', blank=True, null=True)
    po_electrical_materials_cost =models.CharField(max_length=120, choices=PO_ELECTRICAL_MATERIAL_CHOICES, default='None', blank=True)
    po_subcontractors = models.FileField(upload_to='files/ProcurementTeam/posubcontractor/%Y/%m/%d/', blank=True, null=True)
    po_subcontractors_cost = models.CharField(max_length=120, choices=PO_SUBCONTRACTORS_CHOICES, default='None', blank=True)
    posted_by = models.ForeignKey(CustomUser, on_delete=models.DO_NOTHING)
    is_approved = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.BooleanField(default=True)

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

    def total_material_cost(self):
        """Function to return total procurement PO cost"""
        total_procurpo = self.po_steel_cost + self.po_electrical_materials_cost + self.po_subcontractors_cost
        return total_procurpo

考虑到我选择了10000、20000和10000,但现在的输出是100002000010000,我希望输出为40,000。为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

由于选项在string中以quotes('')的形式给出,因此它们得到appended而不是得到added

total_procurpo = int(self.po_steel_cost) + int(self.po_electrical_materials_cost) +int(self.po_subcontractors_cost)

答案 1 :(得分:0)

您还可以尝试使用summap

total_procurpo = sum(
    map(
        float,
        (
            self.po_steel_cost,
            self.po_electrical_materials_cost,
            self.po_subcontractors_cost,
        ),
    )
)