我有一个快速的问题.我正在尝试将字段添加到模型中,该模型是2个字段的总和.
例如:
class MyModel(models.Model)
fee = models.DecimalField()
fee_gst = models.DecimalField()
Run Code Online (Sandbox Code Playgroud)
我想我可以在模型中添加@staticmethod:
@staticmethod
def fee_total(self):
return self.fee + self.fee_gst
Run Code Online (Sandbox Code Playgroud)
但我似乎无法使用以下方法访问模型的"fee_total"字段:
model = MyModel.objects.get(pk=1)
total = model.fee_total
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
干杯
我想你想为你的模型添加一个方法,所以这个https://docs.djangoproject.com/en/dev/topics/db/models/#model-methods可能对你有帮助.
@staticmethod
是一个装饰器,声明方法class
,所以有什么区别?
总而言之,静态方法没有任何特定对象的实例只是class
Object 的实例,我的意思是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
Run Code Online (Sandbox Code Playgroud)
虽然文档需要更长的方法:
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)
Run Code Online (Sandbox Code Playgroud)
尽管我们使用装饰器作为简写方法,但这两种方法几乎相同.
希望这可以帮助.
归档时间: |
|
查看次数: |
3775 次 |
最近记录: |