Python Django@staticmethod两个字段之和

Python Django@staticmethod两个字段之和,python,django,Python,Django,我有一个简短的问题。我正在尝试向模型中添加一个字段,它是两个字段的总和 例如: class MyModel(models.Model) fee = models.DecimalField() fee_gst = models.DecimalField() 我想我可以在模型中添加一个@staticmethod: @staticmethod def fee_total(self): return self.fee + self.fee_gst 但我似乎无法通过以

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

例如:

class MyModel(models.Model)
      fee = models.DecimalField()
      fee_gst = models.DecimalField()
我想我可以在模型中添加一个@staticmethod:

@staticmethod
def fee_total(self):
     return self.fee + self.fee_gst
但我似乎无法通过以下方式访问模型的“费用总额”字段:

model = MyModel.objects.get(pk=1)
total = model.fee_total
知道我做错了什么吗


干杯

从您与模型实例的交互方式来看,我相信您实际上希望使用装饰器。

您需要调用此函数,并将实例作为参数传递,如下所示

 total = model.fee_total(model)
静态方法不会将隐式
self
作为实例参数传递


然而,正如“Filip Dupanović”所建议的,您可能希望使用@property而不是@staticmethod,我认为您希望向模型中添加一个方法,这样可能会对您有所帮助

@staticmethod
是一个向
声明方法的修饰符,那么有什么区别呢

长话短说,静态方法没有任何特定对象的实例,只有
对象的实例,我所说的
对象是什么意思,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)
虽然我们使用decorator作为简写,但这两种方法几乎是等价的


希望这有帮助。

您是否尝试过total=model.fee_total()注释在代码中缺少“()”。感谢您的回复,伙计们,这是最清楚的一条。。干杯