python - Django @staticmethod 两个字段之和

标签 python django

我有一个简短的问题。我正在尝试向模型中添加一个字段,该字段是 2 个字段的总和。

例如:

class MyModel(models.Model)
      fee = models.DecimalField()
      fee_gst = models.DecimalField()

我想我可以在模型中添加一个@staticmethod:

@staticmethod
def fee_total(self):
     return self.fee + self.fee_gst

但我似乎无法使用以下方法访问模型的“fee_total”字段:

model = MyModel.objects.get(pk=1)
total = model.fee_total

知道我做错了什么吗?

干杯

最佳答案

我想你想给你的模型添加一个方法,所以这个 https://docs.djangoproject.com/en/dev/topics/db/models/#model-methods可能对你有帮助。

@staticmethod 是一个装饰器,向声明方法,那么有什么区别呢?

长话短说,静态方法没有任何特定对象的实例,只有 class 对象的实例,class 对象是什么意思,大多数python 中的东西,比如函数,类,当然还有对象的实例实际上是对象......

就像之前每个人都提到的那样,@property 是一个装饰器,它让一个方法充当变量......所以你不必显式地使用 ()

无论哪种方式,您都希望这样做:

class MyModel(models.Model)
    fee = models.DecimalField()
    fee_gst = models.DecimalField()

    @property        
    def fee_total(self):
        return self.fee + self.fee_gst 

虽然文档采用了更长的方法:

class MyModel(models.Model)
    fee = models.DecimalField()
    fee_gst = models.DecimalField()


    def _fee_total(self):
        return self.fee + self.fee_gst
    fee_total = property(_fee_total)

尽管我们使用装饰器作为简写,但这两种方法几乎是等价的。

希望这对您有所帮助。

关于python - Django @staticmethod 两个字段之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11445972/

相关文章:

python - Django 单元测试,未知列错误

django - 具有FileField的Django模型-动态“upload_to”参数

python - AttributeError - CBV 'function' 对象没有属性 'as_view'

python - self.assertRaises 作为上下文管理器,msg 参数未按预期工作

python - 如何为多个数据框列制作管道?

javascript - 如何使用 dajax/dajax-ice 填充 div?

django - 如何使用 Django-Python 创建 "beautiful"URL

python - pip 在 vi​​rtualenv 中的缓存在哪里?

python - 在子类中强制使用类变量

python - 使用Python的正则表达式在某些字符之间插入符号