I'm wondering if it is possible to override the default value of a field when it is returned. Say I had a model:
class ModelA(models.Model)
name = models.CharField(max_length=30)
Is there any way that calling
modela_instance.name
can return a modified value, for example name + " foo", but have the code that appends foo run by default within the model itself, so all I would need to do is call name to get the appended value?
I should elaborate and say that what I'm actually hoping to do is have a method within the model:
def get_name(self):
return self.name + " foo"
or similar, and just want that get_name method to override the call to the field "name".
Yes, you can use properties to do this
class ModelA(models.Model)
_name = models.CharField(...)
def set_name(self, val):
self._name = "%s - foo" % val
def get_name(self):
return self._name
name = property(get_name, set_name)
Why would you want to do this? Not sure, but I don't think this is a good idea..
However, you can use for example the unicode method:
class ModelA(models.Model)
name = models.CharField(max_length=30)
def __unicode__(self):
return "%s : foo" % self.name
and when calling just use:
modela_instance
or when foo has to be dynamic:
class ModelA(models.Model)
name = models.CharField(max_length=30)
def __unicode__(self):
return "%s : %s" % (self.name, self.make_foo())
def make_foo(self):
return "foo"
or define your own method:
class ModelA(models.Model)
name = models.CharField(max_length=30)
def alt_name(self):
return "%s : foo" % self.name