2016-10-12 12 views
-2

私はclass A(models.Model)とattrを持っていますnameです。私はテンプレートとビューでそれをobj_a.nameとして使用します。私は関数としてnameのattrを上書きする必要があり、obj_a.nameと書くとき、私は関数getNameから応答を得るでしょう。 DjangoPythonでどうすればいいですか? Laravel PHPでは$this->getNameAttribute()であり、オブジェクトからの返信nameを上書きすることができます。 Nameはほんの一例であり、私はほぼすべてのattr与えられたクラスでそれを使いたいです。属性を関数として上書きする

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) 
関連する問題