Перезаписать атрибут как функцию Django

Я имею class A(models.Model) с атрибутом name, Я использую его в шаблоне и просматривать как obj_a.name, Мне нужно переписать name attr как функция и когда я пишу obj_a.name Я бы получил ответ от функции getName, Как я могу сделать это в Django а также Python? В Laravel PHP это $this->getNameAttribute() и я могу переписать возвращение name с объекта. Name Это только пример, и я хочу использовать его почти со всеми атрибутами данного класса.

class Item(caching.base.CachingMixin, models.Model):
    _name = models.CharField(_('Name'), max_length=100, db_column="name",
                         help_text=_('Item name'))

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

2 ответа

Вы можете достичь этого поведения с property,

class A(models.Model):
    _name = Field()

    @property
    def name(self):
        return self._name

Я нашел решение идеально подходит для моего использования:

def __getattribute__(self, name):
    if name == 'name':
        return 'xxx'

    return super(Item, self).__getattribute__(name)
Другие вопросы по тегам