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()注释在代码中缺少“()”。感谢您的回复,伙计们,这是最清楚的一条。。干杯