2012-01-19 5 views
5

私はいくつかの共通の機能を持つモデルをいくつか持っています。各モデルは物理的にストックされたタイプのアイテムなので、stockのようなものを共有し、低在庫警告イベント(電子メールを送信)などのいくつかのものを共有します。Django:子のフィールドラベルまたはhelp_textをオーバーライドするモデル

コードを複製するのではなく、抽象モデルを書いてそれから継承しました。

class LowStockModel(models.Model): 
    stock = stock = models.IntegerField() 
    out_of_stock_behaviour = models.CharField(max_length=20, choices=[...]) 

    class Meta: 
     abstract = True 

    def save(self, *args, **kwargs): 
     super(self.__class__, self).save(*args, **kwargs) 
     if self.stock <= 0: 
      #... 

私の問題は、私はラベルを変更したり、私が産卵てる子クラスで異なるhelp_textからstockフィールドを追加する必要があります。クライアント(およびそのスタッフ)がユニットに関する指示を必要とするため、これは非常に重要です。私は子供の周りで騒ぎを試みた__init__しかし、私はどこにも得ていない。

tl; drフィールドのラベルを子モデルからどのように変更できますか?継承はジャンゴで使用したいことがあり、抽象クラスから作られるとき

+0

'super(self .__ class__、self)'あなたは簡単に無限再帰を得ることができます。 – DrTyrsa

+3

それはきれいではありませんが、http://stackoverflow.com/a/928774/16361 – AdamKG

+0

おかげで@AdamKGそれは完璧です。 – Oli

答えて

1

CustomClass._meta.get_field('yourfield').verbose_name = 'Your custom text'

あなたのクラスは次のようにする必要があります:

class AncestorClass(models.Model): 
    stock = models.CharField(max_length=50, verbose_name='AncestorStockName') 
    # etc ... 

そして今、我々は、子供をカスタマイズする必要がありますこのようなクラス:

class ChildClass(AncestorClass): 
    stock = models.CharField... # Customize your stock field 

ChildClass._meta.get_field('stock').verbose_name = 'CustomVerboseStock' 
0

これは動作します:

class MyForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['stock '].label = "any label" 
関連する問題