我有一个简短的问题。我正在尝试向模型中添加一个字段,该字段是 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/