- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个简短的问题。我正在尝试向模型中添加一个字段,该字段是 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/
我在实践中理解了 @staticmethod 装饰器。但是模拟静态方法的一个错误让我陷入了 Python 语义兔子洞。 The standard type hierarchy中的描述部分让我感到困惑:
我在实践中理解了 @staticmethod 装饰器。但是模拟静态方法的一个错误让我陷入了 Python 语义兔子洞。 The standard type hierarchy中的描述部分让我感到困惑:
我做了这两门课: class A: @staticmethod def f(x): print("x is", x) class B: def f(x):
我最近使用 pycharm 和 sonarqube 来审查我的代码。这两个工具都建议更新许多方法,例如 get_success_url,它们在其主体中未使用 self 以使用 @staticmetho
问题就是这么说的。我有一个在辅助函数中调用静态方法的抽象类,我希望子类简单地定义静态方法并使用它运行。 也许我可以使用 getattr 之类的东西?我应该改用@classmethod 吗? 最佳答案
我只是不明白为什么我们需要使用@staticmethod。让我们从一个例子开始。 class test1: def __init__(self,value): self.val
假设我有一个 class这需要一个函数(或者我应该说方法)是: 独立于我的class实例 - 不需要 self争论; 仅在我的 class 中被调用对象 我在任何时候都不需要访问它(例如覆盖它); 我
我有这个代码: class A(object): @staticmethod def open(): return 123 @staticmethod
我正在写一个非常普通的 django 管理类,带有这样的自定义操作: class DeviceAdmin(admin.ModelAdmin): actions = ("enable", "di
您好,我正在尝试创建一个装饰器,但收到staticmethod object not callable错误,下面是我的代码 from db.persistence import S3Mediator
class UserInput(): users=[] def __init__(self, name,lista,listb,listc,listd): self.n
关于为什么/何时应该使用类方法与静态方法,有几个关于 SO 的很好的解释,但我一直无法找到关于何时使用静态方法而不是根本没有修饰的答案。考虑一下 class Foo(object):
在 Python 3.x 中,我可以用 bar() 做什么而不能用 foo() 做什么? class A: def foo(): print("some code")
我想创建元类,它将用跟踪装饰器装饰每个函数。 所以我得到了这个: from functools import wraps from inspect import getfile from arrow
我正在尝试实现 infer_class 函数,给定一个方法,找出该方法所属的类。 到目前为止,我有这样的东西: import inspect def infer_class(f): if in
我有一个 python 类,它有多个方法。我已经通过 @staticmethod 实例定义了我的方法,我想从我的主函数 (main_function) 内部调用我的类的其他方法。我想我需要 self
我有一个简短的问题。我正在尝试向模型中添加一个字段,该字段是 2 个字段的总和。 例如: class MyModel(models.Model) fee = models.DecimalF
我想了解静态方法在内部是如何工作的。我知道如何使用 @staticmethod 装饰器,但我将避免在这篇文章中使用它,以便更深入地了解静态方法的工作原理并提出我的问题。 根据我对 Python 的了解
在 Python 中,在一个类中,静态方法可以调用在同一类中定义的另一个局部函数/方法吗? 我尝试了以下代码并收到一条错误消息,指出 foo1() 未定义。 class trialOne(object
我想知道您是否在代码中使用了@staticmethod 装饰器。 我个人不使用它,因为写 @staticmethod 比写 self 需要更多的字母。 使用它的唯一好处(对我来说)可能是代码更清晰,但
我是一名优秀的程序员,十分优秀!