2012-01-19 15 views
5

Ho alcuni modelli che hanno tutti alcune funzionalità comuni. Ogni modello è un tipo di articolo fisicamente fornito in modo che condividano cose come stock e condividano anche alcune cose come eventi di avviso di scorte basse (invia una e-mail).Django: etichetta campo Override o testo help_text nel bambino Modello

Piuttosto che duplicare il codice, ho scritto un modello astratto e ne ho ereditato.

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

Il mio problema è che ho bisogno di modificare l'etichetta o aggiungere diversi help_text al campo stock nelle classi figlio che sto deposizione delle uova. È molto importante perché il cliente (e il suo staff) ha bisogno di istruzioni sulle unità. Ho provato a munging nel bambino __init__ ma non riesco ad arrivare da nessuna parte.

tl; dr Come è possibile modificare l'etichetta su un campo da un modello figlio?

+0

Non eseguire questa operazione: 'super (self .__ class__, self)' È possibile ottenere facilmente la ricorsione infinita. – DrTyrsa

+3

Non sarà carino, ma: http://stackoverflow.com/a/928774/16361 – AdamKG

+0

Grazie a @AdamKG è perfetto. – Oli

risposta

1

Quando l'ereditarietà è fatto da una classe astratta, in Django si consiglia di utilizzare:

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

Le classi dovrebbero essere come:

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

E ora dovremmo personalizzare il bambino classe come questa:

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

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

Questo dovrebbe funzionare:

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