Django静态方法两个字段的和

2024-04-29 03:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很快的问题。我试着给一个模型添加一个字段,它是两个字段之和。在

例如:

class MyModel(models.Model)
      fee = models.DecimalField()
      fee_gst = models.DecimalField()

我想我可以在模型中添加一个@staticmethod:

^{pr2}$

但我似乎无法使用以下工具访问模型的“费用总额”字段:

model = MyModel.objects.get(pk=1)
total = model.fee_total

你知道我做错了什么吗?在

干杯


Tags: 工具模型modelmodelsclassmymodeltotal费用
3条回答

从您与模型实例交互的方式来看,我相信您实际上希望使用@property装饰器。在

您需要调用它,并将实例作为参数传递,如下所示。在

 total = model.fee_total(model)

静态方法不将隐式self作为实例参数传递。在

但是,正如“Filip Dupanović”所建议的那样,您可能希望使用@property而不是@staticmethod

我想您应该向模型中添加一个方法,这样https://docs.djangoproject.com/en/dev/topics/db/models/#model-methods可能会对您有所帮助。在

@staticmethod是一个向class声明方法的修饰符,那么有什么区别?在

长话短说,静态方法没有任何特定对象的实例,只是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 

尽管文件采用了更长的方法:

^{pr2}$

尽管我们使用decorator作为简写,但这两种方法几乎是等价的。在

希望这有帮助。在

相关问题 更多 >