gpt4 book ai didi

python - Django @staticmethod 两个字段之和

转载 作者:太空狗 更新时间:2023-10-30 00:57:06 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com