2012-01-19 13 views
5

Tengo algunos modelos que tienen todas una funcionalidad común. Cada modelo es un tipo de artículo almacenado físicamente, por lo que comparten cosas como stock y también comparten algunas cosas como eventos de advertencia de stock bajo (envía un correo electrónico).Django: anula la etiqueta de campo o help_text en el modelo

En lugar de duplicar el código, escribí un modelo abstracto y he heredado de él.

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: 
      #... 

Mi problema es que necesito cambiar la etiqueta o añadir diferentes help_text al campo stock en las clases hijas que estoy desove. Es muy importante porque el cliente (y su personal) necesitan instrucciones sobre las unidades. Intenté aferrarme al niño __init__ pero no llegaré a ningún lado.

tl; dr ¿Cómo se puede cambiar la etiqueta en un campo de un modelo hijo?

+0

No haga esto: 'super (self .__ class__, self)' Puede obtener fácilmente una recursión infinita. – DrTyrsa

+3

No va a ser bonito, pero: http://stackoverflow.com/a/928774/16361 – AdamKG

+0

Gracias @ AdamKG eso es perfecto. – Oli

Respuesta

1

Cuando la herencia está hecho de una clase abstracta, en Django es posible que desee utilizar:

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

Las clases deben ser como:

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

Y ahora debe personalizar el niño clase como esta:

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

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

Esto debería funcionar:

class MyForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['stock '].label = "any label" 
Cuestiones relacionadas