【问题标题】:Simultaneously making calculation on two fields in django, but only one is being performed at a time在django中同时对两个字段进行计算,但一次只执行一个
【发布时间】:2017-05-07 22:35:59
【问题描述】:

我正在尝试同时执行这两个操作,但一次只返回一个。如果我删除其中任何一个,另一个会被执行。有没有办法让他们两个同时工作?我说的是 Grossannualsalary 和 textDeduct。

class Salarie(models.Model):

    grossmonthlysalary = models.FloatField(
        _('Monthly Salary'),
        null=False,
        blank=False,
        default=0.00
    )

    monthlyincometax = models.FloatField(
        _('Monthly Income Tax'),
        null=False,
        blank=False
    )

    contractperiod = models.IntegerField(
        _('Contract Period'),
        null=False,
        blank=False
    )

    grossannualsalary = models.FloatField(
        _('Gross Annual Salary'),
        null=True,
        blank=True
    )

    taxDeduct = models.FloatField(
        _('Tax Deduction'),
        null=False,
        blank=False,
        default=0.00
    )

    def save(self, *args, **kwargs):
        self.grossannualsalary = self.grossmonthlysalary * self.contractperiod
        super(Salarie, self).save(*args, **kwargs)

    def save(self, *args, **kwargs):
        self.taxDeduct = self.grossmonthlysalary * self.monthlyincometax / 100
        super(Salarie, self).save(*args, **kwargs)

【问题讨论】:

  • 为什么grossannualsalary总是一个计算的结果?为什么不把它变成一个财产呢? taxDeduct 也是如此
  • 为什么你定义了两次保存方法?名称只能有一种方法。为什么不把它们放在同一个函数中呢?

标签: python django


【解决方案1】:

我不明白你为什么在一个模型中编写两个保存方法。请试试这个。

def save(self, *args, **kwargs):
    self.grossannualsalary = self.grossmonthlysalary * self.contractperiod
    self.taxDeduct = self.grossmonthlysalary * self.monthlyincometax / 100
    super(Salarie, self).save(*args, **kwargs)

【讨论】:

  • 这仍然只是“一次一个”的计算,它并不完全清楚(对我来说)操作实际上试图做什么
  • 我同意,如果 Grossannualsalary 和 taxDeduct 是从其他模型字段的计算中得出的,那么最好写属性。
  • @Darshit 很想在这种情况下使用属性,您能否帮我将此代码转换为属性计算。
  • @IsraelZ.Kollie 请通过this 教程和SO answer
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2016-02-23
相关资源
最近更新 更多