2016-10-12 1 views
-2

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

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 
+0

Добавить модель пожалуйста –

+0

Добавлена ​​часть класса. – gargi258

+0

Создавали ли и применяли миграцию после смены 'name' на' _name'? –

ответ

3

Вы можете добиться этого: property.

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

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

Когда я это сделал, я получил 'Неизвестные поля (имена), указанные для A' – gargi258

0

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

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

    return super(Item, self).__getattribute__(name)