【问题标题】:Django what to use instead of null?Django用什么代替null?
【发布时间】:2021-10-03 00:27:51
【问题描述】:

我正在计算投资回报率 (ROI),公式为

((Net returns - Actual investment) / Actual investment ) * 100

For Ex: (( 2000 - 1000 ) / 1000 ) * 100 = 100%

因此,这里有一个问题:最初返回值为 0,直到返回实际出现!这样,上面的计算显示-100%

所以我最初考虑使用 Null,如果它为 null,我们可以显示 0%,当值从 null 变为某个值时,我们可以显示相应的 ROI。

问题是,我无法对 Null 值执行加法,

_investment = F('returns') + 2000
    _investment .save()

由于returns字段设置为null F表达式无法进行加法运算,如何处理?因为我不能将默认值设置为“0”并基于它使用 if 条件 - 因为也可能有一些负回报。

请提出一些解决这个问题的方法!

【问题讨论】:

  • 这能回答你的问题吗? Treat NULL as '0' in Django model
  • 使用Coalesce 如上所述链接的重复目标并将第二个参数作为F('actual_investment') 传递,结果应该是0。 (注:看第二个答案,比接受的要好)
  • Net Returns 是否包括 Actual InvestmentReturns on Investment ?你的公式不明确。
  • 它也包括实际投资@Ram
  • 如果包括实际投资,那么Net Returns最初怎么会是0呢?最初Net Returns 将等于Actual Investment,因此差异为 0,您的公式给出 0% 而不是 -100%。是吗?

标签: python django


【解决方案1】:

使用@property 来计算你需要的逻辑怎么样?

class YourModel():

    @property
    def count_roi(self):
        if self.returns - self.actual_investment < 0:
            return 0
        else:
            return ((self.returns - self.actual_investment ) / self.actual_investment ) * 100

【讨论】:

    【解决方案2】:

    您应该能够使用“实际投资”的价值作为“净回报”的初始值,尽管我认为“净回报”在这里用词不当,它实际上应该是“当前价值”(投资)。回报通常是扣除您的初始投资后剩下的,即当前价值 - 实际投资。

    Returns = current value - actual investment

    ROI = (returns / actual investment) * 100

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2021-09-02
      • 2015-09-19
      • 2013-11-04
      • 2018-06-18
      • 2021-11-26
      相关资源
      最近更新 更多