I have a quick question. I'm trying to add a field to a model which is the sum of 2 fields.
For example:
class MyModel(models.Model)
      fee = models.DecimalField()
      fee_gst = models.DecimalField()
I thought I could just add a @staticmethod inside the model:
@staticmethod
def fee_total(self):
     return self.fee + self.fee_gst
But I can't seem to access the "fee_total" field of the model using:
model = MyModel.objects.get(pk=1)
total = model.fee_total
Any ideas what I'm doing wrong?
Cheers
I think you want to add a method to your model so this https://docs.djangoproject.com/en/dev/topics/db/models/#model-methods might help you.
@staticmethod is a decorator that declares method to the class, so whats the difference?
Well long story short, static methods don't have instances to any particular object just an instance to the class Object, what do I mean by class object, most things in python like functions, class, and of course instances of objects are actually objects ...
Like everyone has mentioned before @property is a decorator that lets a method act as variable ... so you don't have to explicitly use ()
eitherway, you would want to do this:
class MyModel(models.Model)
    fee = models.DecimalField()
    fee_gst = models.DecimalField()
    @property        
    def fee_total(self):
        return self.fee + self.fee_gst 
though the docs take a longer approach:
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)
both methods are pretty much equivalent though we use the decorator as a short-hand.
hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With